启动线程后导致JFrame窗体卡死

呵-呵呵 2009-08-24 09:55:58
如题

/**
* 原题:当用户单击"启动线程"时,在控制台持续打印一段话
* 当用户单击"中断线程"时,控制台结束打印.
*/

package com.thread;

import java.awt.Container;
import java.awt.event.*;

import javax.swing.*;

public class print extends JFrame {
Thread t = new Thread(new Runnable() { // 实现Runnable接口
public void run() {
while (true) {
System.out.println("Java test");
t.yield();// 通知线程礼让
try {
t.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});

public print() {
Container c = getContentPane();
JButton b1 = new JButton("启动线程");
JButton b2 = new JButton("中断线程");
setLayout(null); // 按钮布局方式
b1.setBounds(10, 70, 120, 30);// 按钮b1位置
b2.setBounds(160, 70, 120, 30);// 按钮b2位置
c.add(b1);
c.add(b2);

t.setPriority(1);// 设定线程优先级

b1.addActionListener(new ActionListener() {// b1按钮事件

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (!t.isAlive()) {
t.run();
}
}

});

b2.addActionListener(new ActionListener() {// b2按钮事件

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (t.isAlive()) {
t.interrupt();
}
}

});

// 窗体样式
setTitle("控制线程");
setSize(300, 200);
setResizable(false);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new print();
}

}
...全文
216 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
closewbq 2009-08-24
  • 打赏
  • 举报
回复
t.run()
while (true)
呵-呵呵 2009-08-24
  • 打赏
  • 举报
回复
还有个问题,为什么执行t.interrupt();后还在打印?谢谢!
diggywang 2009-08-24
  • 打赏
  • 举报
回复
启动线程应使用t.start(),而不是t.run()

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧