我有课。在这个类中,我声明了一个私有(private)变量private Agent agent;
。在我的类里面,我有
private Thread controller = new Thread() {
...
}
在上面的私有(private)线程
中,我调用getParameter
,它是所考虑的类的私有(private)方法。在getParameter
中,我调用agent
的方法之一。结果我得到了一个NullPointerException
。因此,我得出的结论是,从 getParameter
中看不到 agent
。
这是为什么呢?难道是因为getParameter
在私有(private)线程
中?如果是这样,所描述的问题如何解决?
已添加
我意识到我需要更具体。我的代码是这样组织的:
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();
...
}
}
添加2 在游戏窗口中我有:
public void startWindow() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
controller.start();
}
});
}
最佳答案
NullPointerException
与可见性无关。您可能正在调用 null 对象的 getParameter 方法。您的 agent
变量已声明,但未初始化。您可能想要编写如下代码:
private Agent agent;
private Thread controller = new Thread() {
agent = new Agent();
// ...
agent.getParameter(); // should not throw a NullPointerException
}
添加代码后更新
您的代码有两个agent
定义。类(class)第一名:
private Agent agent;
run()
方法中的第二个:
Agent agent = new Agent();
您的getParameter()
方法不知道run()
方法中定义的agent
。它只知道该类的 agent
成员,该成员尚未初始化。当您删除 agent
的第二个定义时,您的问题将得到解决:
public void run() {
...
// Agent agent = new Agent();
agent = new Agent(); // works fine: you are initiliazing the class member
...
parameter = getParameter();
}
旧更新:
NullPointerException
在 getParameter()
方法中抛出。所以我知道你的代码如下:
private Something getParameter() {
agent.someMethod(); // exception thrown here
}
如果这是您的代码,问题仍然相同:agent
未初始化。您必须在 getParameter()
方法内调用其任何方法之前对其进行初始化。
关于java - 为什么物体是看不见的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4315742/