gpt4 book ai didi

Thread.isAlive() 中的 java.lang.NullPointerException

转载 作者:行者123 更新时间:2023-12-01 17:45:48 25 4
gpt4 key购买 nike

有一个名为r1的可运行方法

 Runnable r1=new Runnable(){
@Override
public void run(){
//some code here
}
};

我创建了一个线程th1

Thread th1;

现在,在我的主框架的激活窗口中我写下:

private void formWindowActivated(java.awt.event.WindowEvent evt) {       
setLocationRelativeTo(null);
Thread th1=new Thread(r1); //For those who want to know I initialized the thread twice that was the problem damn!
th1.start();
}

然后,万一用户快速传递到名为 f1 的子框架线程 th1 仍在运行时,我想让它显示一个加载屏幕,没什么花哨的,现在只是一个简单的 gif。这个加载框架被命名为“loading”。

所以,我写了这个:

private void f1formWindowActivated(java.awt.event.WindowEvent evt) {  
f1.setLocationRelativeTo(null);
while(th1.isAlive())
{
loading.setVisible(true);
}
loading.dispose();
}

这就是我遇到空指针异常的问题,问题出在这一行:

th1.isAlive()

如果我评论这一切都很好。

PS:

我已经从原始代码中删除了很多代码,以节省您的麻烦,我相当确定其余的代码可以正常工作。另外,我在 netbeans 中编码。而且,如果重要的话,我还有另一个名为 th 的线程,但直到您单击 f1 中存在的 jButton 后,该线程才会启动> 希望这些信息足够。帮助。谢谢

编辑:

线程th1全局

th1 总是首先被初始化,事实上,线程甚至开始运行它会一直运行,直到 f1 的窗口激活事件。

最佳答案

Thread th1 =... 创建一个新的局部变量,该变量隐藏全局变量。

其他可能的原因:您的代码仅在用户必须首先激活 formWindow 时才有效。如果情况并非如此,则永远不会创建该线程。

更好的解决方案是创建带有可见加载屏幕的表单 f1 并在线程末尾禁用它。

如果情况并非如此,则您要么有两个变量 th1 (并且仅初始化其中一个),要么在代码中的某处将 th1 设置为

使用调试器查看变量的值以及它们何时更改。

关于Thread.isAlive() 中的 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55477982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com