首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个类(Java)进行非静态嵌套线程访问

从另一个类(Java)进行非静态嵌套线程访问
EN

Stack Overflow用户
提问于 2012-04-23 01:00:43
回答 3查看 293关注 0票数 0

我在另一个类中创建线程对象时遇到了一些问题(它被定义到这个类中);

它的嵌套方式如下:

代码语言:javascript
复制
public final class Sculpture extends UiApplication
{  
     final class ScreenThread extends Thread
     {
        //thread I want to access
     }
}  

所以在我的另一个类中,我想创建线程对象,所以我尝试了;

代码语言:javascript
复制
Sculpture.ScreenThread test = (new Sculpture).new ScreenThread();

  • 这个错误(在Eclipse plugin中)显示“没有可访问的雕刻类型的封闭实例”。

据我所知,我不能取消嵌套,因为它会导致很多代码无法工作(我假设它依赖于UiApplication),出于同样的原因,我也不能使它成为静态的。

你知道我做错了什么吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-23 01:13:02

在您当前的代码中,您定义了一个内部类,它需要外部类的实例,包含类才能被实例化:

代码语言:javascript
复制
ScreenThread screenThread = new Sculpture().new ScreenThread();

如果您不需要访问外部类上下文,则可能需要定义一个嵌套类:

代码语言:javascript
复制
public final class Sculpture extends UiApplication {  
     static final class ScreenThread extends Thread {
        //thread I want to access
     }
}  

然后你可以正常地导入和实例化它(例如,不需要首先创建一个外部的包含类的实例):

代码语言:javascript
复制
ScreenThread screen = new ScreenThread();

最后要注意的是,对于子类Thread来说,这通常是一种糟糕的做法。更好的做法是实现Runnable。

票数 3
EN

Stack Overflow用户

发布于 2012-04-23 01:04:11

您不是在创建Sculpture。调用应该类似于new Sculpture().new ScreenThread()

票数 1
EN

Stack Overflow用户

发布于 2012-04-23 01:05:08

看起来你只是忘记了new Sculpture之后的()?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10270028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档