2013-02-17 128 views
0

我的代碼:無法在內部類find方法

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 
    } 
    } 
} 

哪裏出現錯誤我指出的地方。什麼原因以及如何解決?

回答

2

那麼,這是一個簡單的。 「spawnRnn」的類型爲「線程」,而不是「SpawnRnn」

+0

我也試過這樣做:private Runnable spawnRnn = new SpawnRnn()和soesnt也可以。只是顯示了另一個錯誤編輯:啊,它應該是SpawnRnn不能Runnable ...我的錯誤 – user2080377 2013-02-17 20:06:14

+0

@ user2080377:再次,在這種情況下'spawnRnn'不會有一個名爲'loadData'的成員 - 只是'run()'。 – 2013-02-17 20:07:16

+0

是的,我注意到它有點晚了..但是,謝謝 – user2080377 2013-02-17 20:07:51

2

當編譯器說,spawnRnnThread型的,而不是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變量,或者你是否可以在構造函數中使用局部變量。

(我也做了最後的理由的變量,當你可以做到這一點,它使代碼更容易推理。)

0

的問題是,spawnRnn類型爲主題不是SpawnRnn的。