在我的程序中,有一个按钮,"显示"和另一个按钮,"重置"。 用户在文本字段中输入他们想要的素数,然后单击"显示"按钮。然后,第一个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()方法只能工作一次吗?
提前致谢。
答案 0 :(得分:0)
run()
方法就像任何其他方法一样,可以多次调用。无法多次调用的方法是start()
(根据Thread
)。
您的解释似乎与您提供的代码不符。您说您希望在用户单击重置时生成新线程,但是如果源是显示,则只构造或启动线程。你的意思是,你想取消最后一个线程并启用控件让用户重新开始?在这种情况下,您应该使用Future
,而不是通用线程。
另一件事是UI组件通常不是线程安全的。 Swing在每个组件JavaDoc上明确警告它。您可能看到的只是组件在从不同的线程更改时不更新其可见状态。您是否尝试使用调试器来查看某个线程是否实际上没有生成,或者它是否正在生成,但是没有您想要的结果?