2013-03-02 65 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); 
    } 
}