C
Christian_84
Gast
Hallo,
ich hab ein schwieriges Probelm mit Threads!
Das problem ist das der zweite Dialog sich erst aktualisiert wenn die function Startoperation abgelaufen ist er soll aber die ganze Zeit aktualisiert werden!
Ich habe mal versucht meine Situation per Pseudocode in Klassen darzustellen.
Ich hab mir Mühe gegeben die Situation zu beschreiben aber besser kann ich es glaube ich nicht! Fragen dazu beantworte ich gerne!
ich hab ein schwieriges Probelm mit Threads!
Das problem ist das der zweite Dialog sich erst aktualisiert wenn die function Startoperation abgelaufen ist er soll aber die ganze Zeit aktualisiert werden!
Ich habe mal versucht meine Situation per Pseudocode in Klassen darzustellen.
Ich hab mir Mühe gegeben die Situation zu beschreiben aber besser kann ich es glaube ich nicht! Fragen dazu beantworte ich gerne!
Code:
Dialog Klasse{
Startoperation{ // gestartet über einen Button
Starten von AnimationsDialog // wird angezeigt ist aber nicht owner und kann nicht aktualisieren
Klasse_Animation jp = new Klasse_Animation()
jp.main(350, this, "Titel");
Thread thread = new Thread(){
public void run(){
readData();
wait();
... // sobald diese Operation fertig ist ist die Animation Owner und aktualisiert sich
}
};
}
OperationComplete{
...
notify();
}
readData(){
methode die Operation Complete Event liefert
}
}
class Klasse_Animation extends Thread
{
private int time = 0;
private JDialog frame = null;
private String function;
public void main(int tmpTime, JDialog owner, String tmpFunction) {
time = tmpTime;
frame = owner;
function = tmpFunction;
Thread th = new Thread(this);
th.start();
}
public void run()
{
final JDialog dialog = new JDialog(frame, function, true);
JProgressBar bar = new JProgressBar();
JButton butOk = new JButton("OK");
JLabel labEmpty = new JLabel(" ");
JLabel labWarning = new JLabel("Please restart J/BOS to reload the read.repository!");
butOk.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
dialog.setVisible(false);
}
});
Container pane = dialog.getContentPane();
pane.setLayout(new FlowLayout());
pane.add(labEmpty);
pane.add(bar);
pane.add(butOk);
bar.setMinimum(0);
bar.setMaximum(100);
bar.setStringPainted(true);
butOk.setVisible(false);
dialog.setResizable(false);
dialog.setLocation(400, 300);
dialog.setSize(300, 110);
this.startProcess(bar, butOk);
dialog.setDefaultCloseOperation(dialog.DO_NOTHING_ON_CLOSE);
dialog.setVisible(true);
}
public void startProcess(final JProgressBar bar, final JButton butOk){
Thread thread = new Thread(){
public void run(){
int i = 0;
while(i <= 100)
{
bar.setString("Working...");
try
{
this.sleep(time);
} catch (InterruptedException e) {}
bar.setValue(i);
i++;
}
bar.setString("Complete!");
try
{
this.sleep(time*3);
} catch (InterruptedException e) {}
butOk.doClick();
}
};
thread.start();
}
}