for Schleife mit Swing Button abbrechen

Myar

Mitglied
Hallöchen!

Folgendes Problem:

Ich möchte eine for schleife die über eine arraylist iteriert durch Klick auf einen Button beenden können.

Also im Prinzip wird ein Suchlauf gestartet und ich möchte abbrechen können und dann ist das Ding beendet. Ich brauche halt die for schleife, da ich den Index brauche.

Meine Klasse:

Java:
public class Linkseinpflegenctrl implements sqlverbindung {
    static File dieVorlageDatei;
    private Linkseinpflegen einDateiCtrl;
    private int i;
    private String sql;
    private ResultSet res;
    private int result;
    private JFrame main;
    public boolean weiter = true;
    
    public Linkseinpflegenctrl(JFrame main){
        this.main = main;
        einDateiCtrl = new Linkseinpflegen();
        einDateiCtrl.lesenfile(dieVorlageDatei);
        this.FindGameLink();
    }
    private void FindGameLink(){
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                for (i=0; i<einDateiCtrl.arrgamelink.size();i++){
                    try {
                        sql = "ein statement"; //ich suche nach dem String aus der ArrayList in der DB
                        res = v.executeSelect(v, sql);
                        while (res.next())
                            result = res.getInt(1);
                        
                        if(result == 0){ //habe nichts gefunden, also wird im neuen Frame eine Auswahl angeboten oder ich kann was neu anlegen
                            einDateiCtrl.getGameList(i, main);
                            Object[] daten = {einObject mit vielen Listen};
                            this.setNewFrame(daten);
                        }else{//ich update einen Link
                            einDateiCtrl.updateLink(i);
                        }
                    } catch (SQLException ex) {
                        Logger.getLogger(Linkseinpflegenctrl.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
            private void setNewFrame(Object[] daten){
                new ErrorFrame(main, daten, i).setVisible(true);
            }
        });
        t.start();
    }
}

Wie man sieht, habe ich bereits gegoogelt und war zumindest so weit, die Schleife in nen eigenen Thread zu packen. Da hakt es nun.

Die Schleife in Zeile 21. gilt es halt abzubrechen. Der Button wäre in dem neuen Frame "ErrorFrame" (Zeile 41.).

MfG
Myar
 
Zuletzt bearbeitet:
Hallo kann mir deinen Code gerade nicht im Detail anschauen, aber Vorgehensweise wäre folgende:

Du hast deine Schleife, die lässt du so wie sie ist.
Du erstellt eine boolean Variable, diese wird per Button klick auf false geändert.

In einer Schleife brauchst du nun noch eine Abfrage ob die boolean Variable true/false ist, wenn false, dann kannst du die Schleife ja beenden.

Viel Erfolg.
 
Manchmal steht man auch aufm Schlauch...

Meine Lösung sieht so aus:

Java:
for (i=0; i<einDateiCtrl.arrgamelink.size();i++){
            if(!weiter)
                break;

Ist das so, wie ihr euch das vorstellt? Scheint aber zu funktionieren...
 
Naja, man hätte auch den Thread stoppen/unterbrechen können oder nicht? Denn diese Lösung kann, muss aber nicht funktionieren, zumindest so wie sie jetzt ist und so wie von allen hier vorgeschlagen. Ich würde das Wörtchen volatile noch ergänzen wollen 😀
 
Einfach den Thread stoppen mit
Code:
t.stop();
hat Netbeans gemeckert, dass man das nicht machen soll.

volatile musste ich erstmal googeln 😀 Aber habs nu verwendet. Danke für den Hinweis 🙂
 

Zurück
Oben