【发布时间】:2013-06-21 18:10:59
【问题描述】:
我一直在玩 Java,我正在尝试制作一个程序来开始 ping 地址并打印出“ms”。
我有一个 JButton:
JButton start = new JButton("START");
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try {
doCommand();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
doCommand() 方法如下所示:
public static void doCommand() throws IOException{
String s = null;
ProcessBuilder pb = new ProcessBuilder(commands); //definiramo procesBuilder
Process proces = pb.start(); //zaženemo proces (vrne Process)
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proces.getInputStream())); //Branje outputa procesa
BufferedReader stdError = new BufferedReader(new InputStreamReader(proces.getErrorStream())); //Branje error outputa
while((s = stdInput.readLine()) != null){ //dokler output obstaja (ni error)
int dvop = s.indexOf(":") + 16;
if(s.startsWith("Reply")){
s=s.substring(dvop);
int pres = s.indexOf(" ");
s=s.substring(0,pres-2);
//System.out.println(s);
label.setText(s);
}
}
while((s = stdError.readLine()) != null){ //dokler error obstaja
System.out.println(s);
}
}
发生的情况是,每次我按下按钮时,程序都会冻结而没有任何反应,我什至无法以“正常”方式关闭它...... 我想我做错了什么......
【问题讨论】:
-
重的东西应该用
SwingWorker,那么有标签的类就是swingWorker的观察者,swingWorker通知工作结束,你在EDT更新你的标签
标签: java swing concurrency jbutton event-dispatch-thread