2013-03-05 47 views
2

我想創建一個在設備上安裝文件的應用程序。但是我有一個實現進度的問題,我在我的fram中調用類來安裝的代碼如下所示,execShellCmd是調用的方法,可以安裝到所有設備。值是Install類給出的靜態值。我想實現一個進度條,以便安裝和重視安裝進度。如何使進度條擺動的進度?

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    Thread t; 
     t = new Thread(){ 
     private int postion; 
    public void run(){ 
     Install install = new Install(); 
     int position = 0; 
     String fileName = directory; 
     String shellCommand = fileName; 

     // for (int position =0; postion < 105;position +5) { 
       jProgressBar1.setValue(Install.value); 
       try { 
         Thread.sleep(500); 
       } catch (InterruptedException e) { 
       } 
       position += 5; 
     //} 
     install.execShellCmd(shellCommand); 
     //jTextArea1.setText(error.err.toString()); 
     } 

     }; 
     t.start(); 
    } 
+1

的[進度條教程](HTTP: //docs.oracle.com/javase/tutorial/uiswing/components/progress.html)會是一個很好的開始 – Robin 2013-03-05 16:10:15

+0

我開始使用tuto,但創建循環方法並不是問題;來改進欄,但是如何將欄改爲執行腳本的安裝方法。或者如果我使用不確定模式如何停止動畫 – user2043602 2013-03-05 16:15:01

+0

不要更新EDT上下文之外的UI組件。使用SwingWorker而不是線程 – MadProgrammer 2013-03-05 19:21:08

回答

2

如圖所示here,您可以使用ProcessBuilder執行腳本。解析從getInputStream()獲得的合併流,以評估腳本的實際進度。使用這些信息來調整你的JProgresBar。要在GUI中保持活躍性,請在SwingWorkerdoInBackground()方法中執行此操作,您可以從中調用setProgress()

+0

這就是我在Install類中所做的事情,並且作爲腳本結果的第getd行的數量由靜態變量值 – user2043602 2013-03-05 16:36:33

+0

給出,因爲當我調用此值時,我將擁有最後一個值在執行結束 – user2043602 2013-03-05 16:37:32

+0

對,單個值不是很有幫助;你必須解析腳本的'stdout'流。這是你的劇本嗎?你能啓用類似詳細模式的東西嗎?編輯:請更新您的問題以反映您的方法。 – trashgod 2013-03-05 16:39:57