gpt4 book ai didi

java - 从 JFrame (linux) (eclipse) 运行可执行文件

转载 作者:太空宇宙 更新时间:2023-11-04 11:04:26 25 4
gpt4 key购买 nike

我正在尝试在我的 JFrame GUI 中运行一个名为 src2srcml 的基于 linux 的可执行文件,它获取一个源文件(C、C++、Java)并将其转换为一个 XML 文件以备后用。我的 GUI 成功地使用 JFileChooser 来定位和选择源文件。

我目前正在尝试使用 Runtime.getRuntime().exec() 函数来运行可执行文件,但到目前为止没有任何反应。我可以使用命令“bash-4.1$ ./src2srcml --position sum_avg.c -o hooray.c.xml”从命令行运行它,它获取源文件 sum_avg.c,将其转换为新的 XML文件 hooray.c.xml 但是当我在 Runtime.getRuntime().exec() 中尝试完全相同的命令时,没有任何反应。我不是特别熟悉 Runtime.getRuntime().exec() 或 ProcessBuilder 类。我是否需要先导航到可执行文件所在的位置?我还尝试在第一个参数中包含路径,调用可执行文件本身,但这也不起作用。

//--- 'Run Source Code' Button---//
JButton btnRunSourceCode = new JButton("Run Source Code");
btnRunSourceCode.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(filePath == null){
textArea.setText("Please Load a source file (C, C++, Java)");
}
try{

textArea.setText("Converting Source Code to XML");
String[] commands = {"./src2srcml", "--position ", selectedFile.getName(), " -o targetFile.xml"};
Process src2XML = Runtime.getRuntime().exec(commands);
src2XML.waitFor();
}
catch(Exception exc){/*src2srcml Fail*/}
}
});
btnRunSourceCode.setBounds(612, 39, 156, 25);
contentPane.add(btnRunSourceCode);

当前可执行文件位于我的项目 (Eclipse) 的工作区中。当一切正常时,我想将整个程序编译成一个可执行文件,以便将 src2srcml 嵌入到我的可执行文件中,而不需要单独使用。这可能吗?

提前感谢您的任何想法!

最佳答案

我不熟悉 Unix,但是,你不需要通过 unix shell 来调用它吗,或许可以通过使用你的命令数组调用 bash 或其他 shell 命令?例如答案 here

其他问题

  • 线程:您当前要求您的进程在 Swing 事件线程上运行,如果成功将导致您的 GUI 完全卡住并且在进程结束之前无法使用。您应该对 GUI 线程进行类似此后台的所有调用,例如可以通过使用 SwingWorker 对象来实现。
  • GUI 错误:您在 JButton 上调用 setBounds 并添加到可能使用空布局的容器中,这将其标记为来自 Swing 新手的代码,因为这意味着您正在制作非常困难的不灵活的 GUI升级或增强。使用布局管理器来放置您的组件。 Swing 布局管理器将帮助您展示如何解决此问题。

关于

when I get everything working I would like to compile the whole program into a single executable so that the src2srcml is embedded into my executable and isn't required separately.

不,这可能是不可能的,除非您在 jar 中包含该文件以及解压缩它的代码。

关于java - 从 JFrame (linux) (eclipse) 运行可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25817092/

25 4 0
文章推荐: 我可以从 c 程序与打开的 vt 交互吗?
文章推荐: css - 使用 flex 单元作为元素的边距/填充?
文章推荐: javascript - 我试图使用带按钮的 figcaption 将图像彼此相邻放置 HTML 和 CSS
文章推荐: java - 将 ListArray 从 Servlet 传递到在 Windows 中工作但在 Linux 中失败的 JSP