我正在使用Java中的應用程序來更新每秒的結果,直到它停止。在30秒鐘內,它會每秒調用一組特定的方法,然後在接下來的30秒內調用另一組方法,然後再次調用第一組,然後依此類推。由於我希望能夠在任何時候停止並重新啓動在後臺執行的計算,因此我創建了一個GUI和幾個按鈕來啓動和停止新線程,以及一種顯示結果的方法每一秒。Java線程問題
我遇到的問題是,一旦新線程啓動,我不能切換回GUI,直到它完成,並且由於線程將繼續前進,直到我告訴它停止,我最終不能退出無限循環。我可以通過將GUI放在它自己的線程中來解決這個問題,以便兩個線程同時運行?如果是這樣,我將如何從GUI內部做到這一點?
我正在使用多個類,所以我不想發佈不相關的東西。
public class GUI extends javax.swing.JFrame implements Runnable{
Graphics g;
Threads thread = new Threads();
private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {
thread.run()
}
[..]
private void stopButtonActionPerformed(java.awt.event.ActionEvent evt) {
thread.stop()
}
}
public class Threads implements Runnable{
boolean opened=false;
road first = new road();
public void run() {
opened=true;
first.standardInitialization();
while(opened){
for(int i=0; i<30 && opened; i++){
try {
first.redLightAction();
System.out.println("cars: " + first.firstLight.cars);
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Threads.class.getName()).log(Level.SEVERE, null, ex);
}
}
for(int i=0; i<30 && opened; i++){
try {
first.greenLightAction();
second.greenLightAction();
System.out.println("cars: " + first.firstLight.cars);
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Threads.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
public void stop(){
opened=false;
}
}
請發表相關的代碼。 – MByD 2011-04-15 21:44:00
郵政編碼。如果確實創建了一個新線程來執行該工作,它不應該影響GUI線程。 – 2011-04-15 21:44:15
這篇文章將回答您的問題,併爲您提供可幫助您的解決方案:[併發性](http://download.oracle.com/javase/tutorial/uiswing/concurrency/index.html) – 2011-04-15 21:46:24