gpt4 book ai didi

java - 关闭线程时遇到问题

转载 作者:行者123 更新时间:2023-12-01 06:39:37 26 4
gpt4 key购买 nike

当我尝试停止正在运行的线程时,我似乎无法弄清楚为什么会出现空指针异常。 ftprun.requestStop() 设置 while 循环的值,以便应用程序停止。

public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JButton btn = (JButton) e.getSource();
Thread ftpthread= null;
LocalFTP ftprun = null;

switch (e.getActionCommand()) {
case "Start Sorter":
if(ftp) {
JOptionPane.showMessageDialog(frame, "Sorter and ftp cannot run at the same time");
} else {
sorter=true;
btn.setText("Stop Sorter");
btn.setBackground(SystemColor.green);
}
break;
case "Start ftp":
if(sorter) {
JOptionPane.showMessageDialog(frame, "Sorter and ftp cannot run at the same time");
} else {
ftp=true;
btn.setText("Stop ftp");
btn.setBackground(SystemColor.green);
Config config = new Config();
try {
File cf= new File(Configfile.configfile);
if (cf.exists()) {
config=ConfigurationTools.openconfig(Configfile.configfile);
}
else {
ConfigurationTools.writeconfig(Configfile.configfile, config);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

ftprun= new LocalFTP(config,config.getlocalftpinterval());

ftpthread=new Thread (ftprun);

ftpthread.start();

}
break;
case "Start Uploader":
uploader=true;
btn.setText("Stop Uploader");
btn.setBackground(SystemColor.green);
break;
case "Stop Sorter":
sorter=false;
btn.setText("Start Sorter");
btn.setBackground(SystemColor.menu);
break;
case "Stop ftp":
ftp=false;
btn.setText("Start ftp");
btn.setBackground(SystemColor.menu);
ftprun.requestStop();
break;
case "Stop Uploader":
uploader=false;
btn.setText("Start Uploader");
btn.setBackground(SystemColor.menu);
break;

}
}

任何建议。我尝试将线程和可运行变量设置为静态,但出现错误。

最佳答案

这就是问题:

LocalFTP ftprun = null;

switch(...) {
case ...:
...
ftprun = new LocalFTP(...);
...
break;
case ...:
...
ftprun.requestStop();
...
break;
}

这是一个本地变量。它只是在不同的 case block 中设置为非空值,因此在调用 requestStop 的情况下它不可能为非空值。它只会在使用单独的局部变量(将为 null)的 actionPerformed 方法的不同调用中发生。

听起来这确实是整个对象状态的一部分 - 因此您应该将其设为对象中的实例字段,而不是局部变量。

关于java - 关闭线程时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16497655/

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