qq_25611195 2016-12-03 15:17 采纳率: 100%
浏览 1059
已采纳

java 多线程run函数 while循环内如果像此程序那样注释掉 会无法实现功能()

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class Lottery extends JFrame {
public JLabel jb = new JLabel("haha");
public JButton jbt = new JButton("start");
boolean bool1 = false;

public Lottery() {
    this.setVisible(true);
    this.setSize(500, 300);
    this.setTitle("Lottery");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setLayout(null);
    jb.setBounds(50, 20, 200, 30);
    jbt.setBounds(50, 60, 140, 30);
    jbt.addActionListener(new BtListener());
    this.add(jb);
    this.add(jbt);
    Caipiao_thread c = new Caipiao_thread();
    Thread t = new Thread(c);
    t.start();

}

public static void main(String[] args) {

    new Lottery();
}

public static int[] create_number() {
    int[] number = new int[6];
    int i = 0;

    int one;
    while (i < 6) {
        boolean bool = true;// 放在循环内!!!!!!!!
        if (i == 0) {
            number[i] = (int) (Math.random() * 36 + 1);
            i++;
        } else {
            one = (int) (Math.random() * 36 + 1);
            for (int j = 0; j < i; j++) {
                if (number[j] == one) {
                    bool = false;
                    break;
                }
            }
            if (bool) {
                number[i] = one;
                i++;
            }
        }
    }
    return number;

}

class BtListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if (jbt.getText() == "start") {
            jbt.setText("stop");
            bool1 = true;
        } else if (jbt.getText() == "stop") {
            jbt.setText("start");
            bool1 = false;
        }
    }

}

class Caipiao_thread implements Runnable {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        while (true) {
            //system.out.println();
            while (bool1) {
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                int[] number = create_number();

                String s = "";
                for (int i = 0; i < number.length; i++) {
                    s = s + number[i] + "  ";
                }

                jb.setText(s);
            }
        }
    }
}

}
在同学电脑上测试是不可以的,我自己的电脑无论加不加system.out.println();都可以
跟IDE或者jdk有关吗?谢谢各位

  • 写回答

2条回答 默认 最新

  • 看山 Java领域优质创作者 2016-12-04 04:03
    关注

    这个应该是与swing线程抢占有关,只要在Caipiao_thread这个的while(true)里面加一个Thread.sleep就能够显示,或者将对JLabel对象的修改放在主线程里面。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考