不錯的工作,現在我只想知道爲什麼如果我加入while循環指令System.out.println下面的進度顯示在這兩個cmd和Pgbar在桂? :JProgressBar不更新,找不到線索
while(progress < 99){
System.out.println("into while of PBar Thread progress = "+progress);
if(progress != Path.operationProgress){
operationProgressBar.setValue(progress);
progress = Path.operationProgress;
operationProgressBar.repaint(); } }
需要一些幫助身邊,我不能得到的JProgressBar更新,我 不能使用SwingWorker的,我必須解決這個問題離不開它。變量 Path.operationProgress是一個來自「Path」類的實例的靜態變量,它從另一個線程更新,所以我認爲PBar 和Path實例都在用戶線程中執行,而不是在EDT中執行 EDT。這裏是進度條的代碼:
import javax.swing.*; public class Pbar extends Thread { JProgressBar operationProgressBar; public Pbar(JProgressBar operationProgressBar) { this.operationProgressBar = operationProgressBar; } @Override public void run() { int progress = Path.operationProgress; while(progress < 99) { if(progress != Path.operationProgress) { operationProgressBar.setValue(progress); progress = Path.operationProgress; operationProgressBar.repaint(); }}} }
這是啓動線程的操作:
private javax.swing.JProgressBar operationProgressBar; private javax.swing.JLabel pathImage; private javax.swing.JButton simulatedAnnelingButton; public class TSPGUI extends javax.swing.JFrame { TSPMG tspInstance; Path p, result; String filename = ""; int neighborHood_Type = 1, i = 0; // ......Constructor Stuff and init() private void simulatedAnnelingButtonActionPerformed(java.awt.event.ActionEvent evt)
{
主題SA =新的Thread(){ @覆蓋 公共無效的run (){ result = p.SimulatedAnnealing(neighborHood_Type); String lastCostString = result.Cost()+「」; lastCostLabel.setText(lastCostString); }}; sa.start(); Pbar pb = new Pbar(operationProgressBar); pb.start(); } // 一些其他的東西...... }
儘管你的關懷嘗試做的事情在後臺線程,你的問題聞起來像一個線程問題 - 要麼或不確定JProgressBar更新是不顯示的一個。沒有更多的代碼,但很難說。如果上面的代碼在後臺線程上運行,則必須小心地調用EDT上的進度條setValue(...),雖然這不能解決問題,但可能會防止出現間歇性異常。我建議你向我們展示更多代碼,最好是[sscce](http://sscce.org)。 – 2012-02-19 13:28:13
請對代碼塊使用一致的邏輯縮進,並且在每一個代碼行之後不需要空行! – 2012-02-19 13:38:44
另外,你應該努力實現Runnable而不是擴展Thread。另外你如何運行線程?你是在調用'start()'還是'run()'? ......你的問題會導致更多的問題再次被[sscce](http://sscce.org)回答。我知道我在這裏聽起來像是一個破碎的記錄,但是如果寫得好的話,那些東西是很有幫助的。 – 2012-02-19 13:43:33