繁体   English   中英

Java GUI / Swing,停止线程,在类之间传递整数

[英]Java GUI/Swing, stopping the thread, passing integers between classes

我正在尝试使用GUI / Swing对即将举行的考试进行轮盘游戏的模拟。 我有两个类,一个叫做GUI,实际上是用于组件的代码,例如JFrame,JOptionPane,JButtons等。另一类扩展了Thread,并应该在一个小的JLabel上显示随机数,然后运行方法像这样的东西:

public void run() {
    int k = 0;
    for (int i = 0; i < 50; i++) {
        k = (new Random().nextInt(37));
        label.setText(k + " ");
        label.setFont(new Font("Tahoma", Font.BOLD, 56));
        label.setForeground(Color.yellow);
        try {
            sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }       
}

在GUI类中,我只想从上述循环的最后一次迭代中获取数字,然后将其传递给新的int,我将在稍后的GUI类中使用它。 有任何想法吗?

使用Swing Timer而不是Thread.sleep ,它有时会挂起整个swing应用程序。

请看看如何使用Swing计时器

Timer timer = new Timer(50, new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {            
        //next call from here
    }
});
timer.setRepeats(false);
timer.start();

我只想从上述循环的最后一次迭代中获取数字,然后将其传递给新的int,我将在稍后的GUI类中使用它。

只需在另一个接受int的类中创建一个方法(setter),然后从该类中对其进行调用即可进行最后一次调用。


样例代码:

private int counter = 0;
private Timer timer;
...

final JLabel label = new JLabel();
label.setFont(new Font("Tahoma", Font.BOLD, 56));
label.setForeground(Color.yellow);
Thread thread = new Thread(new Runnable() {
    public void run() {

        timer = new Timer(50, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (counter++ < 50) {
                    int k = (new Random().nextInt(37));
                    label.setText(k + " ");
                } else {
                    timer.stop();
                    label.setText("next call");
                }

            }
        });
        timer.setRepeats(true);
        timer.start();
    }
});

thread.start();

快照:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM