高分 求解java菜鸟级别的题

大家可以把我贴出来的代码搬到电脑上去运行下,我就是想问下,当我点“停止”,程序停止运行,但是重新点“开始”时,程序不会再启动,我做的是一个随机选一组号码的程序。impor... 大家可以把我贴出来的代码搬到电脑上去运行下,我就是想问下,当我点“停止”,程序停止运行,但是重新点“开始”时,程序不会再启动,我做的是一个随机选一组号码的程序。
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class SelectNumberFrame extends JFrame implements ActionListener {
private JLabel[] lblNumbers = new MyLabel[6];
private JButton btnStop = new JButton("停止");
private JButton start=new JButton("开始");
private boolean running = true;

public SelectNumberFrame() {
super("选号程序");
this.setSize(800, 100);
init();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setVisible(true);
start.setEnabled(false);
start.addActionListener(this);
btnStop.addActionListener(this);
this.add(start);
this.add(btnStop);

}

private void init() {
setLayout(new FlowLayout());
for (int i = 0; i < lblNumbers.length; i++) {
lblNumbers[i] = new MyLabel();
lblNumbers[i].setBounds(5 + i * 70, 5, 70, 70);//??
lblNumbers[i].setHorizontalAlignment(SwingConstants.CENTER); //?
lblNumbers[i].setVerticalAlignment(SwingConstants.CENTER); //?
btnStop.setEnabled(true);
add(lblNumbers[i]);
}

btnStop.setBounds(425, 5, 70, 70);
start.setBounds(425, 5, 70, 70);

}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==start)
{
running =true;
start.setEnabled(false);
btnStop.setEnabled(true);
javax.swing.JOptionPane.showMessageDialog(null,running);
}
if(e.getSource()==btnStop)
{
running =false;
start.setEnabled(true);
btnStop.setEnabled(false);
javax.swing.JOptionPane.showMessageDialog(null,running);
}
}

private class MyLabel extends JLabel {

public MyLabel() {
new Thread(new Runnable() {

public void run() {
while (running) {
int num = (int) (Math.random() * 10);
MyLabel.this.setText(String.valueOf(num));
try {
Thread.sleep(50);
} catch (InterruptedException e) {
}
}
}
}).start();
}
}

public static void main(String[] args) {
new SelectNumberFrame();
}
}
展开
 我来答
暑假要学习
2010-10-02 · TA获得超过524个赞
知道小有建树答主
回答量:289
采纳率:0%
帮助的人:85.8万
展开全部
很高兴没人回答你的问题,这样你必须采纳我的意见了,
你在停止按钮按下时,在线程中的循环就退出了,线程就结束了,你再将running设置为ture 也没有线程接受。

最简单的解决方法:
private class MyLabel extends JLabel {

public MyLabel() {
new Thread(new Runnable() {

public void run() {
while(true)
{
while (running) {
int num = (int) (Math.random() * 10);
MyLabel.this.setText(String.valueOf(num));
try {
Thread.sleep(50);
} catch (InterruptedException e) {
}
}
}
}
}).start();
}
}
这个里面加上while(true)
已经加进去了,我试过可以了,
还有,你的注释写的太少了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式