如何将进度条添加到while? Java

问题描述:

我不是新手,但也是教授。在Java上。我正在尝试将progressBar添加到我的应用程序,该应用程序向isReachable()方法发送ping到给定的ip范围。 我如何添加?我不知道任务和线程的用法。我阅读关于progressBar的java文档,但我不能添加。 这里是我的代码如何将进度条添加到while? Java

final JButton btnScan = new JButton("Scan"); 
btnScan.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     Runtime rt = Runtime.getRuntime(); 
     String lastIpCheck = " "; 
     String ip = textField.getText(); 
     String lastIp = textField_1.getText(); 
     String parsedOutput= " "; 
     InetAddress inet; 
     boolean reachable; 

     while(!(lastIpCheck.equalsIgnoreCase(lastIp))) { 
      try { 
       inet = InetAddress.getByName(ip); 
       reachable = inet.isReachable(2500); 
       String output=null; 
       lastIpCheck = f.nextIpAddress(ip); 

       if(reachable) { 
        model.addElement(ip); 
       } 

       ip = lastIpCheck; 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 
}); 

我要补充进度为扫描操作,同时循环通过ping扫描做opearation。

请帮帮我。 谢谢。 对不起,语言障碍

+0

“我不知道任务和线程的用法”阅读[书籍](http://jcip.net/),[教程](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ ),更多[javadocs](http://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html)。所以在1个问题中学习所有内容是错误的。 – zapl

+0

谢谢你的建议,我有明天的功课。谢谢你的建议。我会读。我需要一个建议来说明如何去做。 – cantas

+0

http://docs.oracle.com/javase/7/docs/api/javax/swing/JProgressBar.html#setValue(int)这个你不明白吗? – Cruncher

对于我可以看到有关您的文章的内容,您尝试在尝试在Swing中执行长时间运行的任务时保持UI的响应。

不幸的是,Swing是一个单线程窗口系统,试图让长时间运行的任务会阻塞UI。

自Java 1.6以来,Swing SDK包含一个名为SwingWorker的类,该类允许在为UI线程提供挂钩的同时在另一个线程中执行那种类型的任务,以便让用户更新该进程的进度。

基本示例在Java教程中给出。

SwingWorker worker = new SwingWorker<ImageIcon[], Void>() { 
@Override 
public ImageIcon[] doInBackground() { 
    final ImageIcon[] innerImgs = new ImageIcon[nimgs]; 
    for (int i = 0; i < nimgs; i++) { 
     innerImgs[i] = loadImage(i+1); 
    } 
    return innerImgs; 
} 

@Override 
public void done() { 
    //Remove the "Loading images" label. 
    animator.removeAll(); 
    loopslot = -1; 
    try { 
     imgs = get(); 
    } catch (InterruptedException ignore) {} 
    catch (java.util.concurrent.ExecutionException e) { 
     String why = null; 
     Throwable cause = e.getCause(); 
     if (cause != null) { 
      why = cause.getMessage(); 
     } else { 
      why = e.getMessage(); 
     } 
     System.err.println("Error retrieving file: " + why); 
    } 
} 

};

基本上你可以定义自己的SwingWorker的执行在doInBackgroundMethod ping请求,并不断更新与get()方法

这里的UI是链接到Java教程:http://docs.oracle.com/javase/tutorial/uiswing/concurrency/simple.html

在*有关如何使用SwingWorker的详细说明: http://en.wikipedia.org/wiki/SwingWorker

我希望这可以帮助您解决您的问题。

最好的问候。

+0

谢谢你@Kuraokami。这非常有用。 – cantas

+0

你能帮我多一点吗?我做不到。你能描述一下如何做得更清楚吗? – cantas