如何将进度条添加到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。
请帮帮我。 谢谢。 对不起,语言障碍
答
对于我可以看到有关您的文章的内容,您尝试在尝试在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
我希望这可以帮助您解决您的问题。
最好的问候。
“我不知道任务和线程的用法”阅读[书籍](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
谢谢你的建议,我有明天的功课。谢谢你的建议。我会读。我需要一个建议来说明如何去做。 – cantas
http://docs.oracle.com/javase/7/docs/api/javax/swing/JProgressBar.html#setValue(int)这个你不明白吗? – Cruncher