Hallo,
ich habe jetzt die Thread-Anwendung getestet.
Aber wenn ich auf unsere Produktiv-Anwendung die Thread-Technik zum Laufen kriegen möchte, dann zeichnet meine JProgressBar nicht korrekt neu, obwohl sie ständig von dem Thread durchlaufen wird (unabhängig vom Rückgabetyp des Threads).
Das ganze ist wird über einen JButton - ActionListener aufgerufen. Ich zeige es an meinen aktuellen Code:
Code im Hauptformular
Code der Progressbar-Dialog
ich habe jetzt die Thread-Anwendung getestet.
Aber wenn ich auf unsere Produktiv-Anwendung die Thread-Technik zum Laufen kriegen möchte, dann zeichnet meine JProgressBar nicht korrekt neu, obwohl sie ständig von dem Thread durchlaufen wird (unabhängig vom Rückgabetyp des Threads).
Das ganze ist wird über einen JButton - ActionListener aufgerufen. Ich zeige es an meinen aktuellen Code:
Code im Hauptformular
Code:
getSuchButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent aActionEvent) {
final ProgressDialog lProgressDialog = new ProgressDialog("Suche...");
new Thread(lProgressDialog).start();
new Thraed(new Runnable() {
public void run() {
// 1. Methodenaufrufe zu SessionBean (Daten holen)
// 2. Methodenaufrufe zu Table (Daten in die Tabelle setzen)
}
}).start();
}
});
Code der Progressbar-Dialog
Code:
public class ProgressDialog extends JDialog implements Runnable {
private static final long serialVersionUID = -900018691306280601L;
private boolean fProgressStart = false;
private ProgressPanel fProgressPanel = null;
private int fValue = 0;
public ProgressDialog(String aTitle) {
super(ApplicationSingleton.getInstance().getMainWindowControl().getMainWindowFrame(), aTitle, false);
fProgressStart = true;
setLocationRelativeTo(null);
fProgressPanel = new ProgressPanel(); // enthält Panel mit JProgressbar
setLayout(new BorderLayout());
getContentPane().setBackground(new Color(204, 229, 255));
getContentPane().add(fProgressPanel, BorderLayout.CENTER);
setSize(500, 100);
setVisible(true);
}
public void run() {
boolean lValueAdded = true;
while (fProgressStart) {
if (lValueAdded) {
fValue++;
} else {
fValue--;
}
if (fValue >= 100) {
lValueAdded = false;
fValue = 100;
} else if (fValue <= 0) {
lValueAdded = true;
fValue = 0;
}
try {
Thread.sleep(10);
EventQueue.invokeLater(new Runnable() {
public void run() {
fProgressPanel.getProgressBar().setValue(fValue);
}
});
} catch (Exception aException) {
aException.printStackTrace();
}
}
}
@Override
public void dispose() {
fProgressStart = false;
setVisible(false);
super.dispose();
}