New JFrame geht nicht mehr immer ... ?

Moin

Mein System:
linux 2.4.21, XFree 4.3.0 (drm-trunk), j2sdk1.4.0

Als normaler User eingelogt funktioniert folgendes Testprogramm bei mir nicht mehr:

import javax.swing.\*;

public class test{
        public static void main (String[] A){
                try {
                        System.out.println ("1");
                        JFrame JF = new JFrame();
                        System.out.println ("2");
                } catch (Throwable T){
                        System.out.println ("Throwable "+T.toString());
                }
        }
}

Laut jdb bleibt das Ding hier:

  [1] sun.awt.motif.MToolkit.init (native method)
  [2] sun.awt.motif.MToolkit. (MToolkit.java:93)
  [3] sun.reflect.NativeConstructorAccessorImpl.newInstance0 (native method)
  [4] sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:39)
  [5] sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:27)
  [6] java.lang.reflect.Constructor.newInstance (Constructor.java:274)
  [7] java.lang.Class.newInstance0 (Class.java:296)
  [8] java.lang.Class.newInstance (Class.java:249)
  [9] java.awt.Toolkit$2.run (Toolkit.java:724)
  [10] java.security.AccessController.doPrivileged (native method)
  [11] java.awt.Toolkit.getDefaultToolkit (Toolkit.java:703)
  [12] java.awt.Window.getToolkit (Window.java:652)
  [13] java.awt.Window.init (Window.java:223)
  [14] java.awt.Window. (Window.java:252)
  [15] java.awt.Frame. (Frame.java:398)
  [16] java.awt.Frame. (Frame.java:363)
  [17] javax.swing.JFrame. (JFrame.java:154)
  [18] test.main (test.java:8)

für ein paar Minuten stehen.

Führe ich das Programm als root aus so läuft es normal durch. Die Demo’s (jfc/Notepad.jar) laufen auch als normal-User. Das Test-programm lief auf dem gleichen System auch schon als normal-user durch. Das System wurde seitdem nicht geupdatet, laut fcheck hat sich in /usr, /lib und /sbin nichts verändert.

Irgendwelche Ideen ?

(neuinstallation des sdk bringt gar nichts, Neuinstallation des Rechners ist nicht möglich)

Output von lsof:

java      15516 pumpkin  cwd    DIR        9,0     4096    4276268 /home/pumpkin/personalDocs/projekte/java/fsbrowser/TEMP
java      15516 pumpkin  rtd    DIR        9,0     4096          2 /
java      15516 pumpkin  txt    REG        9,0    21252    2326853 /usr/java/j2sdk1.4.0/bin/java
java      15516 pumpkin  mem    REG        9,0    82456    3932812 /lib/ld-2.3.1.so
java      15516 pumpkin  mem    REG        9,0    38356     442839 /usr/java/j2sdk1.4.0/jre/lib/i386/native\_threads/libhpi.so
java      15516 pumpkin  mem    REG        9,0     4391    3064222 /usr/java/j2sdk1.4.0/jre/lib/ext/dnsns.jar
java      15516 pumpkin  mem    REG        9,0    81959    3932848 /lib/libpthread-0.10.so
java      15516 pumpkin  mem    REG        9,0     7992    3932837 /lib/libdl-2.3.1.so
java      15516 pumpkin  mem    REG        9,0  1104040    3932835 /lib/libc-2.3.1.so
java      15516 pumpkin  mem    REG        9,0  5003433    3621048 /usr/java/j2sdk1.4.0/jre/lib/i386/client/libjvm.so
java      15516 pumpkin  mem    REG        9,0    69132    3932839 /lib/libnsl-2.3.1.so
java      15516 pumpkin  mem    REG        9,0   288444     409989 /usr/lib/libstdc++-3-libc6.2-2-2.10.0.so
java      15516 pumpkin  mem    REG        9,0   131156    3932838 /lib/libm-2.3.1.so
java      15516 pumpkin  mem    REG        9,0    73032    2654587 /usr/java/j2sdk1.4.0/jre/lib/i386/libverify.so
java      15516 pumpkin  mem    REG        9,0   143952    2654459 /usr/java/j2sdk1.4.0/jre/lib/i386/libjava.so
java      15516 pumpkin  mem    REG        9,0    89596    2654588 /usr/java/j2sdk1.4.0/jre/lib/i386/libzip.so
java      15516 pumpkin  mem    REG        9,0 23556160    1016292 /usr/java/j2sdk1.4.0/jre/lib/rt.jar
java      15516 pumpkin  mem    REG        9,0    90973    1016293 /usr/java/j2sdk1.4.0/jre/lib/sunrsasign.jar
java      15516 pumpkin  mem    REG        9,0   450286    1016286 /usr/java/j2sdk1.4.0/jre/lib/jsse.jar
java      15516 pumpkin  mem    REG        9,0    76291    1016285 /usr/java/j2sdk1.4.0/jre/lib/jce.jar
java      15516 pumpkin  mem    REG        9,0  2622435    1016274 /usr/java/j2sdk1.4.0/jre/lib/charsets.jar
java      15516 pumpkin  mem    REG        9,0    26352    3916417 /usr/X11R6/lib/libXp.so.6.2
java      15516 pumpkin  mem    REG        9,0     7288    5849495 /usr/X11R6/lib/X11/locale/common/xlcDef.so.2
java      15516 pumpkin  mem    REG        9,0    38892    3932813 /lib/libnss\_compat-2.3.1.so
java      15516 pumpkin  mem    REG        9,0    53559    3064223 /usr/java/j2sdk1.4.0/jre/lib/ext/ldapsec.jar
java      15516 pumpkin  mem    REG        9,0   664067    3064224 /usr/java/j2sdk1.4.0/jre/lib/ext/localedata.jar
java      15516 pumpkin  mem    REG        9,0   116788    3064225 /usr/java/j2sdk1.4.0/jre/lib/ext/sunjce\_provider.jar
java      15516 pumpkin  mem    REG        9,0   290018    3064226 /usr/java/j2sdk1.4.0/jre/lib/ext/vecmath.jar
java      15516 pumpkin  mem    REG        9,0  2504666    3064227 /usr/java/j2sdk1.4.0/jre/lib/ext/j3dcore.jar
java      15516 pumpkin  mem    REG        9,0  1327572    3064228 /usr/java/j2sdk1.4.0/jre/lib/ext/j3dutils.jar
java      15516 pumpkin  mem    REG        9,0  1383287    3064229 /usr/java/j2sdk1.4.0/jre/lib/ext/j3daudio.jar
java      15516 pumpkin  mem    REG        9,0  2982416    2654450 /usr/java/j2sdk1.4.0/jre/lib/i386/libawt.so
java      15516 pumpkin  mem    REG        9,0   332744    2654576 /usr/java/j2sdk1.4.0/jre/lib/i386/libmlib\_image.so
java      15516 pumpkin  mem    REG        9,0   299984    3916420 /usr/X11R6/lib/libXt.so.6.0
java      15516 pumpkin  mem    REG        9,0    51856    3916412 /usr/X11R6/lib/libXext.so.6.4
java      15516 pumpkin  mem    REG        9,0    17212    3916421 /usr/X11R6/lib/libXtst.so.6.1
java      15516 pumpkin  mem    REG        9,0   764656    3916410 /usr/X11R6/lib/libX11.so.6.2
java      15516 pumpkin  mem    REG        9,0    31324    3916339 /usr/X11R6/lib/libSM.so.6.0
java      15516 pumpkin  mem    REG        9,0    76240    3916408 /usr/X11R6/lib/libICE.so.6.3
java      15516 pumpkin  mem    REG        9,0   920988    2654454 /usr/java/j2sdk1.4.0/jre/lib/i386/libfontmanager.so
java      15516 pumpkin    0u   CHR      136,2                1435 /dev/pts/2
java      15516 pumpkin    1u   CHR      136,2                1435 /dev/pts/2
java      15516 pumpkin    2u   CHR      136,2                1435 /dev/pts/2
java      15516 pumpkin    3r  FIFO        0,5               57366 pipe
java      15516 pumpkin    4w  FIFO        0,5               57366 pipe
java      15516 pumpkin    5u  unix 0xeaeff3c0               57368 socket
java      15516 pumpkin    6r   REG        9,0   242700    5734939 /usr/java/j2sdk1.4.0/jre/lib/fonts/LucidaTypewriterRegular.ttf
java      15516 pumpkin    8r   REG        9,0    80856    5734930 /usr/java/j2sdk1.4.0/jre/lib/fonts/LucidaBrightItalic.ttf
java      15516 pumpkin    9r   REG        9,0   344908    5734931 /usr/java/j2sdk1.4.0/jre/lib/fonts/LucidaBrightRegular.ttf
java      15516 pumpkin   10r   REG        9,0   208628    5734932 /usr/java/j2sdk1.4.0/jre/lib/fonts/LucidaSansDemiBold.ttf
java      15516 pumpkin   11r   REG        9,0    91352    5734933 /usr/java/j2sdk1.4.0/jre/lib/fonts/LucidaSansDemiOblique.ttf
java      15516 pumpkin   12r   REG        9,0   253724    5734934 /usr/java/j2sdk1.4.0/jre/lib/fonts/LucidaSansOblique.ttf
java      15516 pumpkin   13r   REG        9,0   698236    5734935 /usr/java/j2sdk1.4.0/jre/lib/fonts/LucidaSansRegular.ttf
java      15516 pumpkin   14r   REG        9,0   141272    5734936 /usr/java/j2sdk1.4.0/jre/lib/fonts/LucidaTypewriterBold.ttf
java      15516 pumpkin   15r   REG        9,0    63168    5734937 /usr/java/j2sdk1.4.0/jre/lib/fonts/LucidaTypewriterBoldOblique.ttf
java      15516 pumpkin   16r   REG        9,0   137484    5734938 /usr/java/j2sdk1.4.0/jre/lib/fonts/LucidaTypewriterOblique.ttf

(Das wiederholt sich ein paar mal mit anderen PID’s)

cu

Hallo,

Mein System:
linux 2.4.21, XFree 4.3.0 (drm-trunk), j2sdk1.4.0

Das hat denke ich nichts mit deinem System zu tun.

import javax.swing.*;

public class test{
public static void main (String[] A){
try {
System.out.println („1“);
JFrame JF = new JFrame();
System.out.println („2“);
} catch (Throwable T){
System.out.println ("Throwable
"+T.toString());
}
}
}

Das bleibt bei mir (OSX, Java 1.4.1) auch hängen, nachdem noch die „2“ ausgegeben wird. Das Problem ergibt sich ja wegen dem JFrame. Und ein JFrame tritt jede Menge Listener, Observer und andere Threads hoch, die noch weiterlaufen. Deshalb endet das Programm auch nicht. Dazu müssten erst sämtliche dieser Threads beendet sein. Das kann u.U. schon ganz schön lange dauern, bis der GarbageCollector dieses Zeug irgendwann beseitigt.

Wenn du willst, dass sich das Programm nach dem "2"er beendet, dann machst du einfach ein System.exit(0); danach, und dann endet das Programm auch.

Aber bei einer Oberflächenanwendung wird das Programm ja normal eh über den Schließen-Knopf des Fensters geschlossen.

Das einzige was mich wundert, ist, dass es bei dir als Root sofort beendet wird, wenn ich das richtig verstehe. Das ist bei mir z.B. nicht so. Aber ich denke, dass es mit dem GarbageCollector zusammenhängt.

mfg
deconstruct

Moin

Das bleibt bei mir (OSX, Java 1.4.1) auch hängen, nachdem noch
die „2“ ausgegeben wird.

Das bleibt bei mir bei der 1 hängen. (in der Erzeugung des JFrame, wie der Trace aus jdb zeigt)

Das einzige was mich wundert, ist, dass es bei dir als Root
sofort beendet wird, wenn ich das richtig verstehe.

in root braucht das etwa 5 sek. (4 sek für den jvm-start, 1,2, ende,…)

cu

Hallo,

Das bleibt bei mir bei der 1 hängen. (in der Erzeugung des
JFrame, wie der Trace aus jdb zeigt)

Dann hab ich das falsch verstanden. Ich tippe mal auf ein Prob mitm X-Server oder mit den Look’n’Feels.

Hast du schon mal probiert ein anderes Look’n’Feel zu nehmen? Metal oder GTK z.B.? Weil eventuell ists ein Problem mit Motif…

Falls es das nicht ist:
Hast du alle Rechte dazu, als normaler Anwender den X-Server zu benutzen? Hast du irgendwelche Devices oder Executables in den Zugriffsrechten beschnitten?
Funktionieren überhaupt Java-Anwendungen, die Swing oder AWT verwenden?

mfg
deconstruct

Moin

Das bleibt bei mir bei der 1 hängen. (in der Erzeugung des
JFrame, wie der Trace aus jdb zeigt)

Dann hab ich das falsch verstanden.

Lies den Stack-trace…

Ich tippe mal auf ein Prob
mitm X-Server oder mit den Look’n’Feels.

Hast du schon mal probiert ein anderes Look’n’Feel zu nehmen?

ja, hab alle 3 durch: 2 schmeissen Exception von wegen „nicht installiert“, und bei dem 3. … naja, es ändert sich nichts.

Hast du alle Rechte dazu, als normaler Anwender den X-Server
zu benutzen?

Nachdem alle anderen Programme normal starten können: ja.

Hast du irgendwelche Devices oder Executables in
den Zugriffsrechten beschnitten?

nein.

Funktionieren überhaupt Java-Anwendungen, die Swing oder AWT
verwenden?

ja. (z.b. alle aus demo/jfc, sowohl mit java-jar gestartet als auch entpackt und neu kompiliert.)

cu

Hallo,

ja, hab alle 3 durch: 2 schmeissen Exception von wegen „nicht
installiert“, und bei dem 3. … naja, es ändert sich nichts.

? Welche denn? Also Metal, GTK und Motif sind bei Linux afaik immer dabei. Ein „nicht installiert“ sollte es da nicht geben, zumindest nicht bei der JRE von SUN. Woher hast du die Java-Version? Blackdown, IBM, direkt von SUN?
Wie hast du denn versucht, Metal oder GTK als Laf einzustellen?
Funktionieren normale Linux-Anwendungen, die die Motif-Bibliotheken verwenden als normaler Benutzer ohne Probleme?

Ich hab leider erst ab Montag wieder ein Linux zur Verfügung, um das direkt zu testen. Ich tippe aber wie gesagt auf ein Problem mit den Motif-Bibliotheken. Im Stacktrace ist der letzte Eintrag auch ein Aufruf einer nativen Methode, und von dort scheints dann nicht mehr weiter zu gehen.
Was ich mal sicher behaupten würde: Das Problem liegt nicht an Java, sondern an einer externen Bibliothek.

mfg
deconstruct

Moin

? Welche denn? Also Metal, GTK und Motif sind bei Linux afaik
immer dabei.

Die 3 werden gefunden: (UIManager.getInstalledLookAndFeels())
javax.swing.plaf.metal.MetalLookAndFeel
com.sun.java.swing.plaf.motif.MotifLookAndFeel
com.sun.java.swing.plaf.windows.WindowsLookAndFeel

Ein „nicht installiert“ sollte es da nicht geben,
zumindest nicht bei der JRE von SUN. Woher hast du die
Java-Version? Blackdown, IBM, direkt von SUN?

Die 1.4.0 von sun, die 1.3.0 von Blackdown. (die IBM-version ist nicht mit java3d kombinierbar, deshalb hab ich da keine andere Wahl)

Wie hast du denn versucht, Metal oder GTK als Laf einzustellen?

UIManager.setLookAndFeel(„javax.swing.plaf.metal.MetalLookAndFeel“);
und als

Bei den anderen gehts in die Hose mit:
Exception in thread „main“ javax.swing.UnsupportedLookAndFeelException: [The Microsoft Windows Look and Feel - com.sun.java.swing.plaf.windows.WindowsLookAndFeel] not supported on this platform

Funktionieren normale Linux-Anwendungen, die die
Motif-Bibliotheken verwenden als normaler Benutzer ohne
Probleme?

Ja. Sowohl in java geschriebene (wie forte) als auch andere. Sie werden auch alle richtig dargestellt, mit den richtigen Window-decorations… alles so wie’s soll.

Ich tippe aber wie gesagt auf ein Problem
mit den Motif-Bibliotheken.

Ich hoffe doch dass die bei einer neuinstallation des sdk’s auch neu erzeugt werden. Das alte hatte ich umbenannt, dann das 1.3.0 installiert. Keinerlei Veränderung.

Was ich mal sicher behaupten würde: Das Problem liegt nicht an
Java, sondern an einer externen Bibliothek.

Seh ich auch so, die Quizfrage ist: an welcher ? An X hat sich nix verändert, fcheck hätte das auffallen müssen. Das KDE (3.1) ist auch gleich geblieben.

Ich hab einen neuen User angelegt und jetzt läuft das Programm, aber nur bei dem neuen User (und root). Das hilft mir zwar weiter, aber es löst das Problem nicht.

cu

Hallo,

Funktionieren normale Linux-Anwendungen, die die
Motif-Bibliotheken verwenden als normaler Benutzer ohne
Probleme?

Ja. Sowohl in java geschriebene (wie forte) als auch andere.
Sie werden auch alle richtig dargestellt, mit den richtigen
Window-decorations… alles so wie’s soll.

so meinte ich das nicht :wink: Motif ist eine Oberflächen-Bibliothek für Unixe. Oft wird auch stattdessen aus Lizenzgründen ein Klon, wie z.B. Lesstif benutzt. Das Java Motif Look’n’Feel ist nur ein Wrapper, der diese Bibliothek zur Darstellung der Oberfläche nutzt.
Unter einer „normalen“ Anwendung, verstand ich eine Linux-Anwendung, die Motif verwendet. Zum Beispiel xpdf sollte Motif/Lesstif zur Anzeige verwenden, wenn mich nicht alles täuscht.

Ich tippe aber wie gesagt auf ein Problem
mit den Motif-Bibliotheken.

Ich hoffe doch dass die bei einer neuinstallation des sdk’s
auch neu erzeugt werden. Das alte hatte ich umbenannt, dann
das 1.3.0 installiert. Keinerlei Veränderung.

Die Motif-Bibliotheken sind nich Teil des SDKs, sondern Teil deines Linux-Systems. Daher bringt hier eine Neuinstallation des SDKs nichts.

Was ich mal sicher behaupten würde: Das Problem liegt nicht an
Java, sondern an einer externen Bibliothek.

Seh ich auch so, die Quizfrage ist: an welcher ? An X hat sich
nix verändert, fcheck hätte das auffallen müssen. Das KDE
(3.1) ist auch gleich geblieben.

Naja, an Motif eben :wink:

Ich hab einen neuen User angelegt und jetzt läuft das
Programm, aber nur bei dem neuen User (und root). Das hilft
mir zwar weiter, aber es löst das Problem nicht.

Hmm… das ändert natürlich alles. Dann liegts wohl an einer .-Datei im Home-Verzeichnis des Benutzers. Möglicherweise an einer, die den X-Server betrifft, oder eine von Java. Weiß jetzt auch nicht genau, was da in Frage kommt, aber das sollte sich per Trial-and-Error feststellen lassen.
Einfach schnell umbennen, ausprobieren, und wenns nichts ändert, wieder zurückbenennen.

mfg
deconstruct