G
Gast
Gast
Hallo Leute,
ich hab mal wieder ein Java Problem und hoffe, dass ihr mir weiterhelfen könnt:
In einer MDI - Anwendung wird über einen Menüpunkt ein neues Fenster geöffnet. Im Konstruktor dieses Fensters werden Daten von einem seriellen Gerät eingelesen, die dann im Fenster dargestellt werden. Ich möchte nun während des Lesevorgangs einen Dialog mit einer Progressbar darstellen, was allerdings nicht funktioniert, da der Inhalt des Dialogs erst dann sichtbar wird, wenn das Fenster fertig dargestellt ist.
Ich denke, dass das irgendwas mit dem Event-Dispatch Thread zu tun hat, da das Fenster ja mittels Menüpunkt aufgerufen wird und für die Darstellung des Dialogs eventuell wieder Events verarbeitet werden müssen, die dann erst nach Abarbeitung der "Fenster" - Events bearbeitet werden können -- bin mir aber nicht sicher.
Kann mir irgendwer erklären, warum es zu dem Problem kommt und wie man es beheben kann?
Der folgende Code zeigt das angesprochene Verhalten:
Grüsse,
--Alex
ich hab mal wieder ein Java Problem und hoffe, dass ihr mir weiterhelfen könnt:
In einer MDI - Anwendung wird über einen Menüpunkt ein neues Fenster geöffnet. Im Konstruktor dieses Fensters werden Daten von einem seriellen Gerät eingelesen, die dann im Fenster dargestellt werden. Ich möchte nun während des Lesevorgangs einen Dialog mit einer Progressbar darstellen, was allerdings nicht funktioniert, da der Inhalt des Dialogs erst dann sichtbar wird, wenn das Fenster fertig dargestellt ist.
Ich denke, dass das irgendwas mit dem Event-Dispatch Thread zu tun hat, da das Fenster ja mittels Menüpunkt aufgerufen wird und für die Darstellung des Dialogs eventuell wieder Events verarbeitet werden müssen, die dann erst nach Abarbeitung der "Fenster" - Events bearbeitet werden können -- bin mir aber nicht sicher.
Kann mir irgendwer erklären, warum es zu dem Problem kommt und wie man es beheben kann?
Der folgende Code zeigt das angesprochene Verhalten:
Code:
public class MainWnd extends JFrame implements ActionListener
{
public MainWnd()
{
JButton button = new JButton("Show Progressbar");
button.addActionListener(this);
getContentPane().add(button, BorderLayout.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(800, 600);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[])
{
new MainWnd();
}
public void actionPerformed(ActionEvent e)
{
JProgressBar bar = new JProgressBar(0, 9);
JDialog dlg = new JDialog();
dlg.setTitle("Lese Waffendaten ...");
dlg.getContentPane().add(bar, BorderLayout.CENTER);
dlg.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dlg.pack();
dlg.show();
for (int i = 0; i < 10; i++)
{
bar.setValue(i);
try {Thread.sleep(500);} catch(InterruptedException ex) {};
}
}
}
Grüsse,
--Alex