UI和设置的java从相同的用户界面启动多个swingworkers
1)纯香草框架的简要描述,以button1的和BUTTON2和textarea1和textarea2
2 )Button1的启动使用的SwingWorker myswingworker1和SW连续运行的任务ingworker的工艺方法不断更新textarea1
3)Button2的使用的SwingWorker启动一个连续运行的任务myswingworker2和SwingWorker类的工艺方法不断更新textarea2
在这种情况下,持续运行的任务“亚行logcat” ,这个命令不断写出连续的日志信息到外面,我捕获并打印到textarea。这种捕获和打印是在回转工人内完成的。
问题
只有一个一键似乎做一次打印输出到textarea的预期任务,无论是按钮1或按钮2,取第一次启动。用户界面永远不会冻结。
随着实验的一部分,我更换了一个长期运行的任务与说指令“dir”它运行并立即返回,即我所附的“目录”,以BUTTON2。现在,如果我跑BUTTON2,它的工作原理,然后Button1的它也能工作。如果我做的其他方式轮只Button1的运行开始长期运行的任务和BUTTON2启动任务似乎等待长期运行的任务结束了,这违背了使用的SwingWorker的全部目的。
如何解决这个问题?我如何防止我的用户界面等待一名摇摆人完成?
代码摘录
public class multiswing extends javax.swing.JFrame {
public multiswing() {
initComponents();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
myswingworker1 m1=new myswingworker1(jTextArea1);
m1.execute();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
myswingworker2 m2=new myswingworker2(jTextArea2);
m2.execute();
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new multiswing().setVisible(true);
}
});
}
public class myswingworker1 extends SwingWorker {
JTextArea jTextArea = new JTextArea();
Process proc;
Runtime rt = Runtime.getRuntime();
public myswingworker1(JTextArea jTextArea) {
this.jTextArea = jTextArea;
}
protected Void doInBackground() throws Exception {
String line = null;
rt = Runtime.getRuntime();
proc = rt.exec("adb logcat");
InputStream stdin = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdin);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
publish(line);
}
return null;
}
@Override
protected void process(List<String> chunks) {
String data = chunks.get(0);
jTextArea.append(data + "\n");
}
}
public class myswingworker2 extends SwingWorker {
JTextArea jTextArea = new JTextArea();
Process proc;
Runtime rt = Runtime.getRuntime();
public myswingworker2(JTextArea jTextArea) {
this.jTextArea = jTextArea;
}
@Override
protected Void doInBackground() throws Exception {
String line = null;
rt = Runtime.getRuntime();
proc = rt.exec("dir");
InputStream stdin = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdin);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
publish(line);
}
return null;
}
@Override
protected void process(List<String> chunks) {
String data = chunks.get(0);
jTextArea.append(data + "\n");
}
}
您的链接已死亡。我所能做的就是关闭它。 – 2011-10-13 06:26:19