Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich stehe grade mal wieder auf dem Schlauch. Ich habe ein Tool gebastelt welches Performance Daten in eine Datenbank schreibt.
Das Tool habe ich eine Swing Gui verpasst, wechle 2 JButtons (Start und Stop) und eine JTextArea verpasst (für Statusausgaben).
Der Button Start ruft über den Action Listener eine Methode "run()" auf welche in einer while Schleife Objekte erzeugt, die die Perfromance Daten abruft und in die Datenbank schreibt.
Wenn ich das ganze nun Starte läuft im Hintergrund alles ok, sprich alle Daten werden abgerufen und in die Datenbank geschrieben. Jedoch bleibt die Gui immer hänger.
Hier etwas Code
Java:
public void run() {
while(getStatus()){ //Solange der Globale Status "true" ist soll die Schleife laufen, -> beim Drücken des StartButtuns wird der Status auf ture gesetzt, beim Drücken des Stop Buttons auf false und die Schleife soll nach dem Beenden des Durchlaufs Stoppen
//Objekte die die Algorithmik enthalten werden aufgerufen
DS4000Collector ds4101 = new DS4000Collector(this.getTaStatus(),DS4101, "DS4101");
DS4000Collector ds4102 = new DS4000Collector(this.getTaStatus(),DS4102, "DS4102");
}
}
class AMAL implements ActionListener {
public void actionPerformed(ActionEvent ae) {
Object object = ae.getSource();
if(object == buttonStart) {
setStatus(true); // Hier wird der Status gesetzt, die while Schleife in run() soll laufen
getStopButton().setEnabled(true); //Stop Button wird freigeschaltet
getStartButton().setEnabled(false); //Start Button wird abgeschlaltet (die while schleife soll ja laufen)
run();
}
if (object == buttonStop) {
setStatus(false); //Hier wird der Status auf false gesetzt, die while schliefe in run() soll stoppen
getStartButton().setEnabled(true);Start Button wird wieder freigeschaltet
getStopButton().setEnabled(false);// ...
}
}
}
Nur wieso bleibt die Gui hängen wenn ich auf Start drücke? Wenn ich die while Schleife weglasse in run() bleibt die Gui nicht hänge, das ganze läuft aber nur einmal durch.
irgendwie klappt das nicht bei mir oder ich habe es nicht ganz verstanden.
Java:
//Auszug auf dem ActionListener
...
if(object == buttonStart) {
setStatus(true);
getStopButton().setEnabled(true);
getStartButton().setEnabled(false);
while(getStatus()){
Runnable r = new TaskRunner(getSGObject());
Thread thr = new Thread(r);
thr.run();
}
....
Ich habe hetzt quasi ne Mantel Klasse gemacht die Runnable implementiert und dann meine Objecte erzeugt
Java:
import sun.rmi.runtime.GetThreadPoolAction;
public class TaskRunner implements Runnable, StorageSubsysteme {
public StatusGui rev;
public TaskRunner(StatusGui sg){
rev = sg;
}
public void run(){
DS4000Collector ds4101 = new DS4000Collector(rev.getTaStatus(),DS4101, "DS4101");
DS4000Collector ds4102 = new DS4000Collector(rev.getTaStatus(),DS4102, "DS4102");
}
}
Das Objekt rev ist die Status Gui die ich übergeben habe, damit ich an die Attribute drann komme. (Kleine Frage geht sowas auch eleganter, ohne das ganze Objekt zu übergeben oder ist das so Standard?)