2017-04-06 10 views
0

私はguiクラスで、登録されたオブザーバーに通知するために次のようにしています。スレッド内のクラスへのアクセス方法

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(); 
     } 
} 

それは私エラー与える:互換性のない型を:オブザーバーどのように私はこれを使用することができますに変換することはできませんか?私は実行の中に別のコンテキストがありますが、どのように私はそれにアクセスできますか?

+0

登録しようとしている実際のオブジェクトは何ですか?スレッドまたはGUIのインスタンス? –

+0

私はguiを登録しようとしています – dtechlearn

+1

'OuterEnclosingClassname.this'すなわち' GUI.this'は、あなたを囲む外側のクラスGUIの現在のオブジェクトへの参照を与えます。単に 'this'を使うと、' Thread'を拡張した匿名クラスのオブジェクトを参照します –

答えて

3

thisは現在スレッドを参照しています。 GUI.thisに電話できる必要があります。詳細は、 hereを参照してください。

0

あなたが迅速かつ汚い探している場合:(これは良い方法ではありません)

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(); 
     } 
} 

そうでなければ私はこの1つのように、Javaでマルチスレッドおよび/または同時実行のチュートリアルを探して推薦します:http://winterbe.com/posts/2015/04/30/java8-concurrency-tutorial-synchronized-locks-examples/

0

@Ishnarkが正しく回答しました。あなたはGUI.this経由でアクセスできるはずです。それだけで十分です。

関連する問題