Vorab: Ja, die Progress Bar und die Anwengungen laufen in zwei verschiedenen Threads.
So nun. Es geht um ein Programm, was im Rahmen eines Projekts für die Schule geschrieben wurde. Das sollte jetzt bald fertig werden aber es hapert am Sahnehäupchen ^^
Das Programm greift am Anfang auf eine nicht geringe Menge an Daten aus einer Datenbank zurück. Dieser Vorgang dauert eine Zeit und dem Benutzer sollte veranschaulicht werden, dass was passiert. Dafür hab ich jetzt folgendermaßen eine Progress Bar implementiert:
Klasse Main
Dad funktioniert jetzt, wenn ich die Klasse über Eclipse starte (Daten werden aus der Datenbank geholt und "Ich lebe" parallel auf der Konsole ausgegeben):
Aber sobald ich das gleiche über eine andere Klasse mache (nämlich über einen Button), wird nur der Dialog ohne Progress Bar angezeigt (siehe Bilder im Anhang). Sobald die Datenbank dann fertig ist, wird auch der Progress Bar ganz angezeigt:
Klasse Start
Ansonsten funktioniert alles einwandfrei. =(
Lurchi
So nun. Es geht um ein Programm, was im Rahmen eines Projekts für die Schule geschrieben wurde. Das sollte jetzt bald fertig werden aber es hapert am Sahnehäupchen ^^
Das Programm greift am Anfang auf eine nicht geringe Menge an Daten aus einer Datenbank zurück. Dieser Vorgang dauert eine Zeit und dem Benutzer sollte veranschaulicht werden, dass was passiert. Dafür hab ich jetzt folgendermaßen eine Progress Bar implementiert:
Klasse Main
Java:
...
Thread progressThread = new Thread(new Runnable()
{
public void run()
{
JProgressBar pb = new JProgressBar(0,100);
pb.setPreferredSize(new Dimension(175,20));
pb.setString("Working");
pb.setStringPainted(true);
pb.setValue(0);
pb.setIndeterminate(true);
JPanel center_panel = new JPanel();
center_panel.add(pb);
JDialog dialog = new JDialog((JFrame)null, "Working ...");
dialog.add(center_panel, BorderLayout.CENTER);
dialog.pack();
dialog.setVisible(true);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
dialog.setLocationRelativeTo(null); // center on screen
dialog.setLocation((dim.width - dialog.getSize().width) / 2,(dim.height - dialog.getSize().height) / 2); // position by coordinates
dialog.toFront(); // raise above other java windows
while(!Thread.currentThread().interrupted())
{
try
{
Thread.sleep(20);
}
catch (InterruptedException e)
{
dialog.dispose();
Thread.currentThread().interrupt();
}
pb.repaint();
System.out.println("Ich lebe");
}
}
});
progressThread.start();
...Datenbank...
Dad funktioniert jetzt, wenn ich die Klasse über Eclipse starte (Daten werden aus der Datenbank geholt und "Ich lebe" parallel auf der Konsole ausgegeben):
Java:
public static void main(String[] args)
{
new Main(10000, 0);
}
Aber sobald ich das gleiche über eine andere Klasse mache (nämlich über einen Button), wird nur der Dialog ohne Progress Bar angezeigt (siehe Bilder im Anhang). Sobald die Datenbank dann fertig ist, wird auch der Progress Bar ganz angezeigt:
Klasse Start
Java:
this.guiStart.button1().addActionListener(new ActionListener()
{
//Englisch
public void actionPerformed(ActionEvent evt)
{
new Main(10000, 0);
guiStart.dispose();
}
});
Ansonsten funktioniert alles einwandfrei. =(
Lurchi