Hallo Allerseits,
bin grade etwas verzweifelt. Ich muss für meine Bachelorarbeit etwas programmieren. Kein Problem. Nur leider macht mir die grafische Ausgabe schwere Probleme:
ich habe einen einfachen Binärbaum und möchte nur die jeweiligen Werte der einzelnen Knoten nach und nach in einer JTextArea ausgeben.
Zwischen jeder Ausgabe soll also etwa eine Pause von 3s liegen. Natürlich liegt hier schon das Problem, die Ausgabe wird erst ganz am Ende,
plötzlich alles auf einmal, ausgegeben nachdem mehrere Male 3s lang gewartet wurde und nicht nach jedem Warten einzeln.
Ich bin irgendwie total aufm Kriegsfuß mit diesem Swingworker (invokelater und invokeandwait habe ich noch nie verstanden)
und deswegen wollte ich um ein paar tips bitten, wie ich hier den Swingworker am besten einbaue, so schwer kann das ja nicht sein
addToLog() macht einfach die Ausgabe über die JTextArea:
Ich bin sehr dankbar für jede Hilfe !!!
Grüße
Sladda
bin grade etwas verzweifelt. Ich muss für meine Bachelorarbeit etwas programmieren. Kein Problem. Nur leider macht mir die grafische Ausgabe schwere Probleme:
ich habe einen einfachen Binärbaum und möchte nur die jeweiligen Werte der einzelnen Knoten nach und nach in einer JTextArea ausgeben.
Zwischen jeder Ausgabe soll also etwa eine Pause von 3s liegen. Natürlich liegt hier schon das Problem, die Ausgabe wird erst ganz am Ende,
plötzlich alles auf einmal, ausgegeben nachdem mehrere Male 3s lang gewartet wurde und nicht nach jedem Warten einzeln.
Ich bin irgendwie total aufm Kriegsfuß mit diesem Swingworker (invokelater und invokeandwait habe ich noch nie verstanden)
und deswegen wollte ich um ein paar tips bitten, wie ich hier den Swingworker am besten einbaue, so schwer kann das ja nicht sein
Code:
public void computeTree(Node node){ //start param: root
//HIER IS DAS PROBLEM...:
try{ //warte 3s damit ein Knoten nach dem anderen ausgegeben wird
Thread.sleep(3000);
}
catch (bla){}
//gehe nach links
Node tmpNodeL = getLeftNode(node);
//suche dazugehörien rechten Knoten:
Node tmpNodeR = getRightNode(tmpNodeL);
if(tmpNodeR!=null){
if (tmpNodeR.isLeaf()){
addToLog("");
addToLog("rechne: "+tmpNodeL.getOperator()+tmpNodeL.getParent().getOperator()+tmpNodeR.getOperator()+" ("+tmpNodeL.getValue()+" "+tmpNodeL.getParent().getOperator()+" "+tmpNodeR.getValue()+")");
addToLog("Ergebnis: "+Misc.convertStringToBool(LogicalExpression.reduce(tmpNodeL.getValue()+tmpNodeL.getParent().getOperator()+tmpNodeR.getValue())));
//mache ganz viel Zeug mit den Knoten, hab ich hier rausgenommen, der Übersicht wegen
//gehe eine Ebene höher und starte von vorne (wenn möglich):
if(tmpNodeL.getParent().getParent()!=null)
computeTree(tmpNodeL.getParent().getParent());
else{ // ANKER (bei root angekommen):
addToLog("");
addToLog("Endergebnis: "+tmpNodeL.getParent().getValue());
}
}
}
else{ //rechts KEIN Blatt: gehe nach rechts und fange von vorne an
computeTree(tmpNodeR);
}
}
}
addToLog() macht einfach die Ausgabe über die JTextArea:
Code:
public void addToLog(String text){
this.txtAreaLog.setText(this.txtAreaLog.getText()+text+"\n");
}
Ich bin sehr dankbar für jede Hilfe !!!
Grüße
Sladda