2017-04-06 16 views
0

Ich versuche in der gui-Klasse zu folgen, um registrierte Beobachter zu benachrichtigen.Zugriff auf die Klasse innerhalb eines Threads

public class GUI extends javax.swing.JFrame implements Observer { 

public notImportantMethod() { 

t = new Thread() { 
      @Override 
      public void run() { 
       for (int i = 1; i <= 10; i++) { 
         myObject.registerObserver(this); 
       } 
      } 

     }; 
     t.start(); 
     } 
} 

Es gibt mir Fehler: inkompatible Typen: kann nicht auf Observer umgewandelt werden Wie kann ich diese nutzen? Ich weiß, innerhalb des Laufs gibt es einen anderen Kontext, aber wie könnte ich darauf zugreifen?

+0

Welches Objekt versuchen Sie zu registrieren? Der Thread oder die Instanz von GUI? –

+0

Ich versuche, gui – dtechlearn

+1

'OuterEnclosingClassname.this' zu registrieren, d. H." GUI.this "gibt Ihnen einen Verweis auf das aktuelle Objekt der äußeren einschließenden Klasse, GUI. Wenn Sie einfach 'this' verwenden, bezieht es sich auf das Objekt der anonymen Klasse, die' Thread' erweitert. –

Antwort

3

this verweist jetzt auf einen Thread. Sie sollten GUI.this anrufen können. Weitere Informationen finden Sie unter here.

0

Wenn Sie suchen schnell und schmutzig: (dies keine gute Praxis ist)

public notImportantMethod() { 

final GUI self = this; 

t = new Thread() { 
      @Override 
      public void run() { 
       for (int i = 1; i <= 10; i++) { 
         myObject.registerObserver(self); 
       } 
      } 

     }; 
     t.start(); 
     } 
} 

Ansonsten würde ich empfehlen, ein Tutorial auf Multi-Threading und/oder Nebenläufigkeit in Java, wie diese aufzublicken : http://winterbe.com/posts/2015/04/30/java8-concurrency-tutorial-synchronized-locks-examples/

0

@Ishnark hat es richtig beantwortet. Sie sollten in der Lage sein, über GUI.this darauf zuzugreifen, das ist alles, was Sie tun müssen.

Verwandte Themen