好的,我正在尝试让我的 JButton 在不同的目录中运行可执行文件。这是我以前编写的控制台应用程序,我希望此按钮运行可执行文件。我对 Java 编程语言相当陌生,但这是我的代码。
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
public class main
{
public static void main(final String[] args) throws IOException {
JFrame f = new JFrame("Test");
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 500);
JPanel p = new JPanel();
JButton b1 = new JButton("Calculate");
f.add(p);
p.add(b1);
Process proce = Runtime.getRuntime().exec("C:/Ctest.exe");
}
private static void test1() {
// TODO Auto-generated method stub
}
{
JFrame f = new JFrame("Test");
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 500);
JPanel p = new JPanel();
JButton b1 = new JButton("Calculate");
f.add(p);
p.add(b1);
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
}
});
}
}
另外,如果您对我有任何建议,请随时告诉我。我使用的是eclipse IDE。
首先看一下ProcessBuilder http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html.
Swing 是一个单线程框架,因此您不会想要启动Process
在事件调度线程的当前上下文中(其中actionPerformed
被调用)并且需要在它自己的线程上下文中执行它。
这就提出了同步结果的问题Process
回到 UI,这只能在 EDT 的上下文中完成。为此,您应该考虑使用SwingWorker
看一眼Swing 中的并发 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ and 工作线程和 SwingWorker http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html更多细节
看一下
- 从进程打印 Java 输入流 https://stackoverflow.com/questions/15801069/printing-a-java-inputstream-from-a-process/15801490#15801490
- Swing 消息只有在 Runtime.getRuntime().exec() 完成执行后才会显示 https://stackoverflow.com/questions/15396694/swing-message-doesnt-get-displayed-until-after-runtime-getruntime-exec-fini/15398441#15398441
- 执行 .bat 文件时启用按钮 https://stackoverflow.com/questions/15129107/enabling-buttons-while-executing-bat-file/15129240#15129240
有关更多示例...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)