Java中的线程获取NullPointerException
我只是想用java调用一个线程。我想检查线程是否中断。线程在类“调度器”中定义。代码如下:Java中的线程获取NullPointerException,java,multithreading,simulation,interrupt,Java,Multithreading,Simulation,Interrupt,我只是想用java调用一个线程。我想检查线程是否中断。线程在类“调度器”中定义。代码如下: if (flag == true) { thread = new Scheduler(); thread.start(); } else { thread.interrupt(); } public void run()
if (flag == true)
{
thread = new Scheduler();
thread.start();
}
else
{
thread.interrupt();
}
public void run()
{
while (thread.isInterrupted() != true) // Here i get a NPE...
{
//....
}
}
获取
NullPointerException
的原因可能是由于if
语句中的flag
为false,该变量未初始化,但我认为这不是问题的根源
如果要检查被调用线程是否中断,应使用
while (!this.isInterrupted()) {
在您的代码片段中,您似乎正在测试另一个
调度程序对象。首先,由于标志是布尔值,您只需编写:
if (flag)
{
thread = new Scheduler();
thread.start();
}
else
{
thread.interrupt();
}
我认为您的问题是,flag的计算结果为false,您最终会对null对象调用isInterrupted()
。也很可能你所指的是一个与你想象中完全不同的线程。不清楚您所指的是哪个对象--您需要发布更多代码
此外:
run()代码段是否来自计划程序?在运行中,为什么有thread.isInterrupted()?改用
Thread.currentThread().isInterrupted()
如果能看到构造函数和线程变量的声明位置,也会很好请提供更大的代码片段。字段thread
的定义位置不明显等。异常和更多代码的完整堆栈跟踪将非常有用。请停止写入(booleanCondition!=true)
。每次你这样做,一只小猫就会哭。如果flag是false
NPE,则调用thread.interrupt()代码>。此外,在这种情况下,线程没有被创建,因此它的run()
方法也没有被执行。是的,我对此也很困惑。我的假设是,他还没有测试代码的某个部分,或者在我们没有的代码中的某个地方是类似于if(!flag)
initializethread的东西。
Thread.currentThread().isInterrupted()