繁体   English   中英

从JFrame运行可执行文件(Linux)(Eclipse)

[英]Run executable from JFrame (linux) (eclipse)

我试图在我的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命令呢? 例如这里的答案

其他问题

  • 线程化:您当前正在要求您的进程在Swing事件线程上运行,如果成功,它将导致GUI完全冻结,并且直到该进程结束才可用。 您应该像通过使用SwingWorker对象来实现的那样,对GUI线程进行所有这样的调用。
  • GUI错误:您在JButton上调用setBounds并将其添加到可能使用空布局的容器中,这将其标记为Swing新手的代码,因为这意味着您制作的非灵活GUI很难升级或提高。 使用布局管理器放置组件。 Swing布局管理器将帮助您展示如何解决此问题。

关于

当一切正常时,我想将整个程序编译为一个可执行文件,以便将src2srcml嵌入到我的可执行文件中,并且不需要单独进行。

不,除非您将文件包含在jar中以及将其解压缩的代码,否则可能无法实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM