这是我正在使用的代码。
public class timerApp {
Runnable timerRun = new runX();
Thread thread1 = new Thread(timerRun);
public static void main(String[] args) {
timerApp xyz = new timerApp();
xyz.createGUI();
}
public void createGUI() {
JButton button = new JButton("Start timer");
JButton button2 = new JButton("Stop timer");
JFrame frame = new JFrame();
JLabel label = new JLabel("under_construction");
frame.getContentPane().add(BorderLayout.NORTH,button);
frame.getContentPane().add(BorderLayout.SOUTH,button2);
frame.getContentPane().add(BorderLayout.CENTER,label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.setVisible(true);
button.addActionListener(new b1L());
button2.addActionListener(new b2L());
}
public class b1L implements ActionListener {
public void actionPerformed(ActionEvent event) {
thread1.start();
}
}
public class b2L implements ActionListener {
public void actionPerformed(ActionEvent event) {
thread1.stop();
}
}
}
我收到错误Note: timerApp.java uses or overrides a deprecated API. Note: Recompile with Xlint:deprecation for details.
我在添加停止按钮的监听器类后开始学习。
RELP!
答案 0 :(得分:6)
stop()
确实已被弃用。它会使程序处于不一致状态。更好的方法是:
Thread.interrupt()
有关如何安全停止线程的更多详细信息,请参阅here。
答案 1 :(得分:5)
首先,这不是错误。这是一个警告,你正在使用一种弃用的方法。
Thread.stop()
已弃用。您可以阅读此here背后的基本原理。
基本上他们的论点是没有安全的方法从外部终止线程;因此,你应该使用的唯一方法是礼貌地要求线程停止:
我应该使用什么而不是 使用Thread.stop吗
停止的大多数用途应该 简单地用代码替换 修改一些变量来表示 目标线程应该停止 运行。目标线程应该 定期检查这个变量,和 从它的run方法返回 如果变量有序时尚 表示它将停止运行。 (这是JavaSoft的方法 教程一直推荐。)To 确保及时沟通 停止请求,变量必须是 volatile(或访问变量 必须同步)。
例如,假设您的小程序 包含以下开始,停止和 运行方法:
private Thread blinker; public void start() { blinker = new Thread(this); blinker.start(); } public void stop() { blinker.stop(); // UNSAFE! } public void run() { Thread thisThread = Thread.currentThread(); while (true) { try { thisThread.sleep(interval); } catch (InterruptedException e){ } repaint(); } }
您可以避免使用Thread.stop 通过替换applet的停止并运行 方法:
private volatile Thread blinker; public void stop() { blinker = null; } public void run() { Thread thisThread = Thread.currentThread(); while (blinker == thisThread) { try { thisThread.sleep(interval); } catch (InterruptedException e){ } repaint(); } }
答案 2 :(得分:3)
您收到此警告,因为不推荐使用Thread的stop()方法。
为什么不推荐使用Thread.stop?
因为它本质上是不安全的。 停止线程会导致它解锁 它已锁定的所有监视器。 (监视器解锁为 ThreadDeath异常传播 堆栈。)如果有任何对象 以前受这些监视器保护 其他人处于不一致的状态 线程现在可以查看这些对象 不一致的状态。这样的对象 据说被损坏了。当线程 对受损物体进行任意操作 行为可能导致。这种行为可能 微妙,难以察觉,或 它可能会发音。与其他不同 未经检查的异常,ThreadDeath 线索无声地杀死线程;因此,用户 并没有警告他的计划可能 损坏。腐败可以表现出来 本身在实际之后的任何时间 发生损坏,甚至数小时或数天 未来。
不错的链接:
http://download.oracle.com/javase/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html
此链接提供与您的问题相关的信息:
Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?