Java中的线程获取NullPointerException

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()

我只是想用java调用一个线程。我想检查线程是否中断。线程在类“调度器”中定义。代码如下:

        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()