Newsgroup: it.comp.java
Titolo: Errore nella kernel32??

Sto facendo il debugging del codice di un programma e sto usando Java 1.2.1,
nel codice faccio un uso massiccio dei componenti javax.swing, adesso di
punto in bianco il programma mi crea un errore di protezione nella kernel32
sempre allo stesso indirizzo. Il problema è che la cosa avviene casualmente
(anche se mi sembra avvenga sempre quando eseguo operazioni su di una JList
in precedenza). L'errore che mi compare è il seguente:
********************************************************************
JAVA ha provocato un errore di pagina non valida nel
modulo KERNEL32.DLL in 015f:bff7b9e3.
Registri:
EAX=102092e0 CS=015f EIP=bff7b9e3 EFLGS=00010206
EBX=054bff88 SS=0167 ESP=053c0000 EBP=053c0020
ECX=053c1ddc DS=0167 ESI=00000001 FS=4997
EDX=00000001 ES=0167 EDI=81783508 GS=0000
Byte all'indirizzo CS:EIP:
53 85 d2 56 57 89 65 e8 75 04 33 c0 eb 54 85 c0
Immagine dello stack:
102092e0 00000001 054bff88 102092e0 053c1ddc bffbfe14 bff79250 ffffffff
053c1dec bff7ce14 102092e0 00000001 10209401 102092e0 053c1e30 10209320
************************************************************************
Se qualcuno sa come potrei risolvere questo problema mi sarebbe di grande
aiuto!!!
Alexio Cassani

Anche io ho avuto un problema simile ma con i JDialog:
Io estendevo la classe JDialog e nel suo costruttore chiamavo setSize(int,
int)... il problema e' che molto spesso quando dovevo visualizzarlo Windows
riportava il messaggio di errore "JAVA ha provocato un errore di pagina non
valida nel modulo KERNEL32.DLL..."
Il codice era ad esempio cosi':
class MyDialog extends JDialog {
public MyDialog() {
    ....
    setSize(int, int);
    ....
}
...altri metodi...
}
per visualizzarlo:
...
MyDialog myDialog = new MyDialog();
myDialog.show();
...
Ho poi cambiato il codice in:
class MyDialog extends JDialog {
public MyDialog() {
    ....
    ....        // chiamata a setSize eliminata
}
...altri metodi...
}
per visualizzarlo:
...
MyDialog myDialog = new MyDialog();
myDialog.pack();
myDialog.show();
...
...e l'errore e' completamente sparito
In effetti il codice utilizzato inizialmente e' teoricamente corretto ma in
pratica le chiamate a setSize vengono fatte PRIMA che la finestra venga
visualizzata ed evidentemente questo crea dei problemi che io comunque ho
riscontrato solamente sotto Win98 (con Linux + i386 e su Unix + SUN il
problema non si e' presentato).
Indubbiamente anche dal punto di vista teorico l'utilizzo del metodo pack()
[che setta correttamente e automaticamente le dimensioni della finestra in
base a quelle dei componenti in essa contenuti] e' molto piu' corretto che
quello di una chiamata a setSize [che setta la dimensione in pixel della
finestra]. Contribuisce infatti ad aumentare la portabilita'
dell'interfaccia che, dal punto di vista delle dimensioni, risente ad
esempio da fattori quali risoluzione dello schermo, font utilizzati ecc.
ecc.
Tutto questo per dire che dal mio punto di vista il problema e' di Windows
solo in parte... pova a vedere se nel tuo codice c'e' un "errore" simile a
quello che ho fatto io e buona fortuna!
Ciao,
federico

 wrote:
Oltre a quanto gia' detto, occhio ad usare show(). E' un metodo 1.0 -
deprecato - e va sostuito con setVisible(true). Mescolare metodi 1.1
(setSize) e 1.0 (show) non e' mai una buona pratica.
I metodi 1.0 - per quanto teoricamente compatibili - si basano su un
modello di peering che in 1.1 e' cambiato un po' in 1.1 - ed inoltre,
per forza di cose, sono ormai molto meno testati.
--
God is Real, unless declared Integer
Sent via Deja.com 
http://www.deja.com/
Share what you know. Learn what you don't.

 (setSize) e 1.0 (show) non e' mai una buona pratica.
il metodo show() per JDialog non e' deprecato: e' deprecato il metodo
show() per Component solamente (questo vale almento per 1.1.8 e 1.2).
Che poi Windows98 faccia i capricci questo e' indubbio: ad esempio
non sono riuscito a modificare l'icona di un internal frame (crash
di sistema su Win98, e non voglio nenche provare con le dialog..),
mentre funziona perfettamente su NT4.
Ciao,
  Vittorio Colombo
  Ericsson Radio Systems AB

Alla fine ho rifatto la GUI con le AWT 1.0 e spero che vada tutto bene!!!
Alexio Cassani

mentre funziona perfettamente su NT4.
Confermo pienamente: l'implementazione di Win32 in W98, rispetto a NT,
e` fatta con i piedi (giudizio pacato). Quando non ti funziona
qualcosa, prima di disperarti, provala su NT, o sul primo Unix che
trovi in giro.