2012-04-22 84 views
0

我在創建另一個類(定義它)的線程對象時遇到了一些麻煩;非靜態嵌套線程 - 從另一個類(Java)訪問

它嵌套像這樣:

public final class Sculpture extends UiApplication 
{ 
    final class ScreenThread extends Thread 
    { 
     //thread I want to access 
    } 
} 

所以在我的其他類,我想創建線程對象,所以我儘量;

Sculpture.ScreenThread test = (new Sculpture).new ScreenThread(); 

- 此錯誤(在BlackBerry Eclipse插件中)說「沒有可以訪問類型Sculpture的封閉實例」。

據我可以告訴我不能取消它,因爲它導致很多代碼不工作(我認爲它依賴於UiApplication),我也不能因爲相同的原因使它靜態。

任何想法我做錯了什麼?

謝謝。

回答

3

在你當前的代碼定義需要外的一個實例內部類,包含以類實例化:

ScreenThread screenThread = new Sculpture().new ScreenThread(); 

如果您不需要訪問外部類的情況下,那麼你可能要定義一個嵌套類代替:

public final class Sculpture extends UiApplication { 
    static final class ScreenThread extends Thread { 
     //thread I want to access 
    } 
} 

,然後可以導入和實例化「正常的」(即,沒有首先創建外,含有類的一個實例):

ScreenThread screen = new ScreenThread(); 

最後一點,子類Thread通常是不好的做法。相反,實施Runnable更好。

1

您並未創建您的Sculpture。電話應該看起來像new Sculpture().new ScreenThread()

1

看起來你只是忘記了()後new Sculpture