2013-03-02 68 views
-3

在類OuterClass中我有一個Thread InnerThread。在線程中,我需要從OuterClass訪問一個方法。我該怎麼做呢?我試過了:從內部線程訪問外部類java

public class OuterClass{ 

    public static void main(String[]args){ 
     Runnable thread = new innerThread(param); 
     new Thread(thread).start(); 

    public void method(param1, param2){ 
     System.out.println("Test method"); 
    } 



    public class InnerThread extends Thread{ 
     public void run(){ 
     System.out.println("Test thread") 
     OuterClass.this.method(param1, param2); 
     } 
    } 

} 

但是程序並沒有進入方法。爲什麼是這樣,它如何工作?

編輯 Im肯定線程運行,因爲我執行其他操作存在和他們的工作,我把打印權的方法(參數1,參數2)的開始,所以我敢肯定,它不進入方法。我只嘗試了方法(param1,param2)而沒有OuterClass.this,它也沒有工作。

+3

你是什麼意思「不進入方法」?你怎麼確定的? – 2013-03-02 23:29:47

+1

你真的開始線程嗎? – 2013-03-02 23:30:11

+4

只要調用'method'應該沒問題,除非需要消歧。這個問題目前的形式還不夠清楚 - 請提供[SSCCE](http://sscce.org/)。 – 2013-03-02 23:33:51

回答

1

這工作正常:

public class OuterClass { 

    public static void main(String[] args) throws InterruptedException { 
     Thread t = new Thread(new OuterClass().new InnerThread()); 
     t.start(); 
     t.join(); 
    } 

    public void method(String param1, String param2) { 
     System.out.println("Test method ("+param1+","+param2+")"); 
    } 

    public class InnerThread extends Thread { 

     public void run() { 
      System.out.println("Test thread"); 
      method("A", "B"); 
     } 
    } 
} 

打印

Test thread 
Test method (A,B) 
+0

是的輸入法()工作正常,輸出有問題,所以我認爲它沒有輸入方法。我的錯。 – olkoza 2013-03-03 00:44:04

0

這可以通過創建兩個獨立的類
1含有在OuterClass
2其他哪些ctreate在OuterClass即實例來實現,主類。
看一看。

public class Main { 


public static void main(String arg[]){ 

OuterClass o=new OuterClass(1,3); 
    } 
    } 

class OuterClass{ 
    int param,param2; 
    InnerThread t; 

OuterClass(int x,int y){ 
this.param=x; 
this.param2=y; 
InnerThread t=new InnerThread(); 
t.start(); 
} 

public class InnerThread extends Thread{ 
     public void run(){ 
     System.out.println("Test thread"); 
     OuterClass.this.method(); 
     } 
    } 
public void method(){ 
     System.out.println(this.param+this.param2); 
    } 
}