2013-03-05 52 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