2016-04-30 19 views
0

在我的程序中我必須使用JProgress酒吧實時顯示多少像素已經加密..所以我在互聯網上看,我發現我應該使用線程,我試過但不工作,這裏是我做了什麼:java netbeans和jprogress吧

public class progress_barr extends Thread 
{ 
public void run() 
    { 
    JPB_crypt.setValue(prog); // prog is manipulated in showpixels function 
     System.err.println("progress here !"); 
    } 

} 
public class calculate extends Thread 
{ 
    public void run() 
    { 
     showPixel(); 
    } 
} 

比我晚打電話給他們,這是我如何使用它

JPB_crypt.setValue(0); 
    appel=1; // to initiate show function 
    calculate calc = new calculate(); 
    progress_barr pb = new progress_barr(); 
    calc.start(); 
    pb.start(); 

問題還是一樣,我的程序完成數據處理比設定我的進步到100%..不是在進步,而是在一次! 我需要它們同時工作

+0

你需要表現出更多的代碼,一個小的可運行可測試的程序或[MCVE]將是最好的。這不是你的整個程序,也不是一個鏈接。 –

回答

1

您使用線程的一般想法是正確的,但爲了能夠隨着計算進度隨時更新JProgressBar,您需要使用SwingWorker。

SwingWorker背後的想法是,您可以使用doInBackground方法在後臺運行方法,然後發佈您的結果供UI使用而不鎖定它。

你在你的代碼中做的是實際上有兩個線程同時啓動。第一個計算你需要計算的任何東西,第二個應該在進度條上動態更新。

這種方法是行不通的,因爲每次第二個線程都必須等待第一個線程結束它的工作才能獲得結果。

你可以閱讀更多有關在這裏的SwingWorker:

https://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html

+0

謝謝,事實上,我學會了如何使用擺動工具和多線程,現在它的工作;)再次感謝 –

+0

那麼這是唯一容易和正確的方式來擁有這樣的工作。 – Aris