[Java] Status eines Vorgangs beobachten

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Smokers, 9. Mai 2011 .

  1. 9. Mai 2011
    Status eines Vorgangs beobachten

    Hallöchen,

    also mein Problem ist das folgende.
    Ich habe eine Klasse :

    Code:
    package optimize.optimizer;
    
    import dataStructs.data.Data;
    
    
    public class EvoOptimizer implements Optimizer {
    
     @Override
     public boolean optimize(Data datenStruktur) {
     //bla bla
     }
    
    }
    
    Diese Klasse errechnet evolutionär einige Dinge und aht alt ein Optimierungsproblem zu lösen.

    Ich möchte nun diesen Vorgang auf einer Status-Bar oder einem Fortschrittsbalken veranschaulichen.
    WIe mache ich das am besten?

    meine Herangehensweise wäre eine simple Variable die bei verschiedenen Stati hochgezählt wird.
    Aber wie komme ich an die Values ran, während Optimzier->optimize() läuft?

    Ich weiß nicht mir fehlt denke ich mal noch eine gute Herangehensweise oder das richtige Denken ^^°
    villeicht weiß ja jemand von euch weiter?!
    Oder kenn ein paar links?

    Nur sucht mal nach statusbar bei google... da kommt alles. echt ALLES, das ganze Internet! ;-) *g*


    Als zusatzaufgabe soll es dann noch möglich sein den Optimzier abzubrechen.
    Also wenn von außen sozusagen ein Interrupt kommt, (Abbrechen knopf) dann muss der Optimierungsprozess jederzeit aufhören können.


    // Gibt es dafür vllt sogar ein Pattern? oder soetwas in der Art? Und wenn ja, wie könnte man es implementieren?!
     
  2. 9. Mai 2011
    AW: Status eines Vorgangs beobachten

    Java unterstüzt direkt keine Events (so würde man das z.B. in .NET lösen). Stattdessen musst du dir eigentlich ein paar Interfaces schreiben und ein Observer-Pattern implementieren. D.h. alle Objekte, die Statusmeldungen erhalten sollen, schreiben sich bei dem betreffenden Objekt ein und dieses ruft dann die im Interface definierte Methode auf diesen Objekten auf, sobald es nötig ist.

    Beobachter (Entwurfsmuster) – Wikipedia

    In Swing wird das ganze prinzipiell schon genutzt, allerdings ist es natürlich die Frage, ob du wirklich diese Interfaces benutzen willst.
     
  3. 9. Mai 2011
    AW: Status eines Vorgangs beobachten

    Um es abzubrechen startest du den Vorgang im eigenen Thread, den du dann abbrechen kannst.

    Wo ist das Problem mit dem hochzählen einer Statusvariable? Einfach eine Public Attribut, dass du immer wieder hochzählst. Wenn du von der Oberklasse solchen Finromationen nicht bekommst, dann kannste du leider auch nichts hochzählen.

    greez
     
  4. 10. Mai 2011
    AW: Status eines Vorgangs beobachten

    Dann muss man aber u.U. wieder Locks einsetzten (unter welchen Umständen volatile reicht, weiß ich nicht), was das ganze nicht gerade einfacher macht. Meiner Meinung nach ist das Observer-Pattern hier schon der bessere Weg.

    Wenn die Berechnung dann in einem Thread läuft und die Listener per Notify-Methode benachrichtigt werden und du so einen Statusbalken verändern möchtest, darfst du nicht vergessen einen Invoke zu benutzen. Denn die Swing-GUI läuft in einem eigenen Thread und ohne funktioniert das nicht:
    Code:
    SwingUtilities.invokeLater(new Runnable() {
     public void run() {
     progressBar.setValue(newValue);
     }
    });
    
     
  5. 10. Mai 2011
    AW: Status eines Vorgangs beobachten

    Wenns um diese Progressbar geht kann ich dir das hier empfehlen:

    Galileo Computing :: Java ist auch eine Insel

    Damit hatte ichs auch hingekriegt ^^
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.