重复重置新线程

时间:2014-04-04 14:38:31

标签: java multithreading reset

在我的程序中,有一个按钮,"显示"和另一个按钮,"重置"。 用户在文本字段中输入他们想要的素数,然后单击"显示"按钮。然后,第一个x素数将出现在文本区域中。

在代码中,我有: 声明:

Thread go;
Thread newThread;
JLabel howManyLabel;
JTextField howMany;
JButton display;
JButton reset;
JTextArea primes;

行动事件:

public void actionPerformed(ActionEvent event) {
    Object source = event.getSource();

    if (source == display) {
        display.setEnabled(false);
        if (go == null) {
            go = new Thread(this);
            go.start();
        } else {
            newThread = new Thread(this);
            newThread.start();
        }
    } else if (source == reset) {
        display.setEnabled(true);
        howMany.setText(" ");
        primes.setText(" ");
    }
}

运行方法:

public void run() {
    int quantity = Integer.parseInt(howMany.getText());
    int numPrimes = 0;
    int candidate = 2;  // candidate = the number that MIGHT be prime

    primes.append("First " + quantity + " primes:");
    while(numPrimes < quantity) {
        if (isPrime(candidate)) {
            primes.append(candidate + ", ");
            numPrimes++;
        }
        candidate++;
    }
}

run()方法属于同一个类,只是计算第一个素数数量。

每次&#34;重置&#34;我都试图创建一个新线程。按钮被调用。该线程第一次运行,但在点击&#34;重置&#34;后再运行。 run()方法只能工作一次吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

run()方法就像任何其他方法一样,可以多次调用。无法多次调用的方法是start()(根据Thread)。

您的解释似乎与您提供的代码不符。您说您希望在用户单击重置时生成新线程,但是如果源是显示,则只构造或启动线程。你的意思是,你想取消最后一个线程并启用控件让用户重新开始?在这种情况下,您应该使用Future,而不是通用线程。

另一件事是UI组件通常不是线程安全的。 Swing在每个组件JavaDoc上明确警告它。您可能看到的只是组件在从不同的线程更改时不更新其可见状态。您是否尝试使用调试器来查看某个线程是否实际上没有生成,或者它是否正在生成,但是没有您想要的结果?