Rom*_*man 0 java visibility private
我上课了.在这个类中,我声明了一个私有变量private Agent agent;.在我的班上,我有
private Thread controller = new Thread() {
...
}
Run Code Online (Sandbox Code Playgroud)
在上面private thread我调用getParameter哪个是所考虑类的私有方法.在getParameter我称之为的方法之一agent.结果我得到了一个NullPointerException.因此,我得出结论,agent从中看不到getParameter.
这是为什么?可能是因为它getParameter是在private Thread?而且,如果是这样的话,如何解决所描述的问题?
添加
我意识到我需要更加具体.我的代码组织如下:
public class GameWindow {
...
private Agent agent;
...
private Thread controller = new Thread() {
public void run() {
...
Agent agent = new Agent();
...
parameter = getParameter();
}
}
...
private String getParameter() {
...
agent.someMethod();
...
}
}
Run Code Online (Sandbox Code Playgroud)
添加2 在GameWindow中我有:
public void startWindow() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
controller.start();
}
});
}
Run Code Online (Sandbox Code Playgroud)
这NullPointerException与能见度无关.您可能正在调用getParameternull对象的方法.您的agent变量已声明,但未初始化.您可能想要编写类似的代码:
private Agent agent;
private Thread controller = new Thread() {
agent = new Agent();
// ...
agent.getParameter(); // should not throw a NullPointerException
}
Run Code Online (Sandbox Code Playgroud)
更新代码后的更新
您的代码有两个定义agent.班上的第一个:
private Agent agent;
Run Code Online (Sandbox Code Playgroud)
而你run()方法中的第二个:
Agent agent = new Agent();
Run Code Online (Sandbox Code Playgroud)
您的getParameter()方法不知道方法中agent定义的内容run().它只知道agent类的成员,它没有被初始化.删除第二个定义时,您的问题将得到解决agent:
public void run() {
...
// Agent agent = new Agent();
agent = new Agent(); // works fine: you are initiliazing the class member
...
parameter = getParameter();
}
Run Code Online (Sandbox Code Playgroud)
OLD UPDATE:NullPointerException抛出getParameter()方法内部.所以我理解你的代码如下:
private Something getParameter() {
agent.someMethod(); // exception thrown here
}
Run Code Online (Sandbox Code Playgroud)
如果这是您的代码,问题仍然是相同的:agent未初始化.您必须在调用方法内的任何方法之前对其进行初始化getParameter().
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |