【发布时间】:2015-03-08 08:51:16
【问题描述】:
当我在传统构造函数中启动新线程时,NetBeansIDE 没有给出警告:
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
(new SomeThread()).start();
}
});
但如果我将其转换为 Lambda 表达式,我会收到警告“在构造函数中启动新线程”:
addActionListener((ActionEvent e) -> {
(new SomeThread()).start();
});
这里有什么问题?正确的解决方案是什么?
编辑 1:
NetBeans IDE 8.0.2 上的同样问题:
代码:
import java.awt.event.ActionEvent;
import javax.swing.Timer;
public class TimerClass extends Timer {
public TimerClass() {
super(1000, null);//Loop 1 sec
addActionListener((ActionEvent e) -> {
(new SomeClass()).start();
});
}
private class SomeClass extends Thread {
@Override
public void run() {
}
}
}
【问题讨论】:
-
看起来像 NetBeans 诊断中的错误。
-
这只是一个警告,我猜它应该是可配置的(虽然我不确定)。请查看 NetBeans 中的警告配置,您可能会有所发现。
-
是的,但一定是这个原因..
-
原因是显示“在构造函数中启动新线程”警告的 NetBeans 代码是在 Java 8 存在之前编写的,并且在向 NetBeans 添加对 Java 8 语法的支持时没有正确更新。
-
是的,可能是这样,因为我使用的是 NetBeans 7.4,所以我会在 8.0.2 上尝试并通知您。
标签: java netbeans lambda thread-safety