在内部类中找不到方法

时间:2013-02-17 20:01:38

标签: java

我的代码:

 public class MyPanel extends JPanel {
   private Thread spawnRnn = new Thread(new SpawnRnn());

   public MyPanel() {
     spawnRnn.start();
   }

   public class SpawnRnn implements Runnable {
     public void loadData() {}
     public void run() {}
   }
   public class MainRnn implements Runnable {
     public void run() {
       spawnRnn.loadData(); //<--cannot find symbol. symbol: method loadData()
                            //location: variable spawnRnn of type Thread
     }
   }
}

我指出了发生错误的地方。是什么原因以及如何解决?

3 个答案:

答案 0 :(得分:2)

嗯,这很简单。 “spawnRnn”的类型为“Thread”,而不是“SpawnRnn”

答案 1 :(得分:2)

正如编译器所说,spawnRnn的类型为Thread,而不是SpawnRnn类型......它没有loadData方法。你可能想要这样的东西:

public class MyPanel extends JPanel {
   private final Thread thread;
   private final SpawnRnn spawnRnn;

   public MyPanel() {
      spawnRnn = new SpawnRnn();
      thread = new Thread(spawnRnn);
      thread.start();
   }

   public class SpawnRnn implements Runnable {
     public void loadData() {}
     public void run() {}
   }

   public class MainRnn implements Runnable {
     public void run() {
       spawnRnn.loadData();
     }
   }
}

这样您就可以访问用于创建线程的SpawnRnn实例。目前还不清楚你是否真的需要thread变量,或者你是否可以在构造函数中使用局部变量。

(此外,我已经将变量设为最终,理由是当可以这样做时,它会使代码更易于推理。)

答案 2 :(得分:0)

问题是spawnRnn的类型是Thread not SpawnRnn。