€dit: Mist, ich merke gerade, dass der Thread besser in Swing / AWT / SWT gepasst hätte, sorry :\ Wäre vielleicht jemand so nett, den dorthin zu verschieben? Schonmal danke.
Hi,
ich weiß nicht, wie ich den Thread hier genau nennen soll, aber ich hoffe mal, es wird gleich ersichtlich, wo mein Problem liegt und zwar möchte ich via JOptionPane und createDialog ein Dialogfenster erstellen und anzeigen. Das ist nicht weiter schwierig.
Funktioniert auch alles einwandfrei.
Nun allerdings muss ich das in Verbindung bringen mit SwingUtilities.invokeLater. Das habe ich auf folgende Weise probiert:
Das Problem hierbei ist, dass das Dialogfenster so aussieht:
http://feigling.php-4.info/darstellung.JPG
also das Fenster garnicht richtig aufgebaut wird. Und zwar liegt das an SwingUtilities.invokeLater. Das Problem ist jetzt aber, dass im eigentlichen Projekt dieses invokeLater benutzt werden muss (soweit ich weiß - den Teil hat jemand anders gemacht ;x)
Funktionieren tut es, wenn ich das Fenster modal mache, allerdings wird Code nach dialog.setVisible(true); natürlich erst ausgeführt, wenn ich auf den Button im Dialog geklickt habe. Im richtigen Projekt wird es da allerdings keinen Button geben. Naja, langer Text, kurze Frage: Weiß jemand, wie ich das Fenster korrekt anzeigen lasse mit SwingUtilities.invokeLater und ohne das Fenster modal zu setzen? ich habe da jetzt bestimmt 10 Stunden dran gesessen und probiert und es jetzt soweit einschränken können wie oben zu sehen ist. Ich weiß so langsam nicht mehr weiter. Was ich weiß ist, dass Swing nicht threadsave ist und dass man darum SwingUtilities.invokeLater benutzt, daher verstehe ich nicht, warum es zu so nem Anzeigenfehler kommt.
Das
könnte man auch rauslassen, allerdings sieht man den Dialog dann natürlich nur ganz kurz. Also am Sleep liegt das nicht, dass der Dialog falsch dargestellt wird.
Ausserdem habe ich es mal so probiert:
Was auch nicht so läuft wie es soll. Ich bin ganz ehrlich gesagt etwas ratlos. Hätte vielleicht jemand eine Idee, wodran das liegen könnte und wie ich es zum Laufen bekomme?
Hi,
ich weiß nicht, wie ich den Thread hier genau nennen soll, aber ich hoffe mal, es wird gleich ersichtlich, wo mein Problem liegt und zwar möchte ich via JOptionPane und createDialog ein Dialogfenster erstellen und anzeigen. Das ist nicht weiter schwierig.
Code:
import javax.swing.*;
public class Main
{
public static void main(String[] args)
{
JOptionPane pane = new JOptionPane(new Object[]{"test text"});
JDialog dialog = pane.createDialog(null, "test caption");
dialog.setModal(false);
dialog.pack();
dialog.setVisible(true);
}
}
Nun allerdings muss ich das in Verbindung bringen mit SwingUtilities.invokeLater. Das habe ich auf folgende Weise probiert:
Code:
import javax.swing.*;
public class Main
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
JOptionPane pane = new JOptionPane(new Object[]{"test text"});
JDialog dialog = pane.createDialog(null, "test caption");
dialog.setModal(false);
dialog.pack();
dialog.setVisible(true);
try
{
Thread.sleep(3000);
}
catch(Exception e)
{
e.printStackTrace();
}
System.exit(0);
}
});
}
}
http://feigling.php-4.info/darstellung.JPG
also das Fenster garnicht richtig aufgebaut wird. Und zwar liegt das an SwingUtilities.invokeLater. Das Problem ist jetzt aber, dass im eigentlichen Projekt dieses invokeLater benutzt werden muss (soweit ich weiß - den Teil hat jemand anders gemacht ;x)
Funktionieren tut es, wenn ich das Fenster modal mache, allerdings wird Code nach dialog.setVisible(true); natürlich erst ausgeführt, wenn ich auf den Button im Dialog geklickt habe. Im richtigen Projekt wird es da allerdings keinen Button geben. Naja, langer Text, kurze Frage: Weiß jemand, wie ich das Fenster korrekt anzeigen lasse mit SwingUtilities.invokeLater und ohne das Fenster modal zu setzen? ich habe da jetzt bestimmt 10 Stunden dran gesessen und probiert und es jetzt soweit einschränken können wie oben zu sehen ist. Ich weiß so langsam nicht mehr weiter. Was ich weiß ist, dass Swing nicht threadsave ist und dass man darum SwingUtilities.invokeLater benutzt, daher verstehe ich nicht, warum es zu so nem Anzeigenfehler kommt.
Das
Code:
try
{
Thread.sleep(3000);
}
catch(Exception e)
{
e.printStackTrace();
}
Ausserdem habe ich es mal so probiert:
Code:
import javax.swing.*;
public class Main
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
JDialog dialog = new JDialog();
dialog.setSize(100, 100);
dialog.setVisible(true);
try
{
Thread.sleep(3000);
}
catch(Exception e)
{
e.printStackTrace();
}
System.exit(0);
}
});
}
}
Was auch nicht so läuft wie es soll. Ich bin ganz ehrlich gesagt etwas ratlos. Hätte vielleicht jemand eine Idee, wodran das liegen könnte und wie ich es zum Laufen bekomme?
Zuletzt bearbeitet: