2016-11-19 2 views
0

Ich habe eine Klasse "HConnection" mit mehreren Methoden wie abort(); und wartenConnection();Threaded runnable Objekt Methode reagiert nicht auf Änderungen

Die warteVerbindung(); Methode wird in meiner Hauptklasse SWT Form mit einem ausführbaren Thread aufgerufen. Wie auch immer, wenn ich die HConnection abbringe(), wird die holdConnection nicht abgebrochen, während es sein sollte.

Werfen Sie einen Blick auf diese Momentaufnahme meiner Hauptcode:

private HConnection connectie; 

private void btnConnect_clicked(SelectionEvent e) { 

    if (btnNewButton_1.getText().equals("Connect")) { 
     String Url = combo.getText(); 
     connectie = new HConnection(Url); 
     connectie.prepare(); 

     new Thread(new Runnable() { 
       public void run() { 
        connectie.awaitConnection(); 

        Display.getDefault().asyncExec(new Runnable() { 
         public void run() { 
          lblNewLabel_2.setText("Waiting -> client"); 
          if (connectie.getState() == 2) { 
           lblNewLabel_2.setText("Replacing URL"); 
          } 
          else { 
           lblNewLabel_2.setText("Failed"); 
           connectie.abort(); 
           btnNewButton_1.setText("Connect"); 
          } 
         } 
        }); 
        if (connectie.getState() == 2) { 
         // go on 

        } 
       } 
     }).start(); 

     //////// 

     btnNewButton_1.setText("Abort"); 
    } 
    else if(btnNewButton_1.getText().equals("Abort")) { 
     connectie.abort(); 
     lblNewLabel_2.setText("Aborted"); 
     btnNewButton_1.setText("Connect"); 
    } 

Und einen Schnappschuss von HConnection:

public void prepare() { 
    addToHostsFile("127.0.0.1" + "\t" + domain); 
    state = 1; 
} 

public void abort() { 
    removeFromHostsFile("127.0.0.1" + "\t" + domain); 
    waitingConnection = false; 
    HostFileEdited = false; 
    state = 0; 
} 

public void awaitConnection() { 
    if (state == 1) { 
     waitingConnection = true; 
     System.out.println("0"); 
     while (/* not found && */ state == 1) { 

      // code 

     } 
     System.out.println("1"); 
     waitingConnection = false; 
     if (state == 1) state = 2; 
    } 

} 

Noch eine Anmerkung; Die Funktion abort() hat tatsächlich funktioniert und den Thread beendet, als ich versucht habe, connetie.abort() direkt nach thread.start(); aufzurufen ("////////" im obigen Code an dieser Stelle) ) Aber wenn es heißt, wo es sollte aufgerufen werden, tun es, was es während

lblNewLabel_2.setText("Aborted"); 
btnNewButton_1.setText("Connect"); 

tun ihre Arbeit

+0

Vielleicht wird Ihr else Block innerhalb der run() Methode nicht ausgeführt –

+0

@VikasSachdeva nein das ist nicht das Problem – JonasAnon

+1

Manchmal starten Threads nicht sofort, wenn Sie also abbrechen, nachdem Sie 'start' in Ihrem Thread aufgerufen haben, wird die' awardConnection() 'möglicherweise nicht einmal aufgerufen –

Antwort

1

sie Ihr Zustand und awaitConnection flüchtigen tun sollten wie erwartet:

private volatile int state; 
private volatile boolean awaitConnection; 
+0

Dies tat es! Vielen Dank – JonasAnon

Verwandte Themen