Also, ich habe eine Funktion die eine Transaktion verbucht und nachdem er bucht muss er ein bißchen warten und dann guckt er nach ob es verbucht worden ist!
Dieses Problem habe ich früher mit Thread.sleep(waitTime); gelöst!
Problem nun ist, das ich einen ProgressBar nebenbei herlaufen lassen will!
Habe mir auch schon eine schöne nette Klasse geschrieben (eigentlich von so nem Java Buch abgeschrieben: JAVA 2 Mastering the JFC) und wenn ich es normal starte (also ohne einen Thread.sleep() ) gehts eigentlich!
Nur wie kann ich ihm jetzt sagen, zeichne mir den ProgressBar, dann beim Thread.sleep zeichne auch und nachdem du fertig bist mit schlafen und die Transaktion fertig verbucht worden ist (also am ende fkt) soll der ProgressBar voll sein!
Das Problem hierbei ist aber nicht das Zeichnen sondern der Schuft blockiert mir ja mit dem sleep den Frame und ich kann nix zeichen (wenn ich sage progressbar.setIndeterminate(true) - zeichnet er mir solange den hin und her Balken bis zum 1ten sleep und dann geht nix mehr
)
Ungefähr aussehen tuts so
Wie muss ich jetzt was ändern?
Hab mich mit Threads nie wirklich beschäftigt und ihn eigentlich nie eingesetzt, wenn was mit Zeit ging hab ich lieber Timer benutzt! (Da Swing ja nicht Thread sicher ist)
Editiert von P3AC3MAK3R: Titel präzisiert
Dieses Problem habe ich früher mit Thread.sleep(waitTime); gelöst!
Problem nun ist, das ich einen ProgressBar nebenbei herlaufen lassen will!
Habe mir auch schon eine schöne nette Klasse geschrieben (eigentlich von so nem Java Buch abgeschrieben: JAVA 2 Mastering the JFC) und wenn ich es normal starte (also ohne einen Thread.sleep() ) gehts eigentlich!
Nur wie kann ich ihm jetzt sagen, zeichne mir den ProgressBar, dann beim Thread.sleep zeichne auch und nachdem du fertig bist mit schlafen und die Transaktion fertig verbucht worden ist (also am ende fkt) soll der ProgressBar voll sein!
Das Problem hierbei ist aber nicht das Zeichnen sondern der Schuft blockiert mir ja mit dem sleep den Frame und ich kann nix zeichen (wenn ich sage progressbar.setIndeterminate(true) - zeichnet er mir solange den hin und her Balken bis zum 1ten sleep und dann geht nix mehr
Ungefähr aussehen tuts so
Code:
public class writeTransGeld()
{
JPanel mainPanel;
JProgressBar jpBar;
boolean writeTransIstGeld(JPanel panel)
{
mainPanel = panel;
if(mainPanel != null)
{
jpBar = new JProgressBar(0, 100);
jpBar.setBorderPainted(true);
mainPanel.add(jpBar, "1,3,3,3,c,c");
mainPanel.repaint();
new UpdateThread().start();
}
//rechne buche
Thread.sleep(waitTime);
//überprüfe
return true/False; //je nach Buchung
}
//funktionen usw...
class UpdateThread extends Thread
{
Runnable update, finish;
int value, min, max, increment;
public UpdateThread()
{
max = jpBar.getMaximum();
min = jpBar.getMinimum();
update = new Runnable()
{
public void run()
{
value = jpBar.getValue() + increment;
updateProgressBar(value);
}
};
finish = new Runnable()
{
public void run()
{
updateProgressBar(min);
}
};
}
public void run()
{
while (value + increment <= max)
{
simulateTimeConsumingActivity();
SwingUtilities.invokeLater(update);
}
SwingUtilities.invokeLater(finish);
}
private void updateProgressBar(int value)
{
System.out.println("Upgedated: " + value);
jpBar.setValue(value);
}
private void simulateTimeConsumingActivity()
{
try
{
Thread.currentThread().sleep(waitTime/10);
increment = (max - min) / 10;
}
catch (InterruptedException e)
{
e.printStackTrace(System.out);
}
}
}
}
Wie muss ich jetzt was ändern?
Hab mich mit Threads nie wirklich beschäftigt und ihn eigentlich nie eingesetzt, wenn was mit Zeit ging hab ich lieber Timer benutzt! (Da Swing ja nicht Thread sicher ist)
Editiert von P3AC3MAK3R: Titel präzisiert