从可执行的Jar运行外部程序

时间:2017-06-26 13:57:05

标签: java swing intellij-idea jar

我为其他人开发的cmd程序创建了一个简单的SWING gui。要运行此程序,我执行以下行:

Process convertProcess = Runtime.getRuntime().exec("jlyt\\prog\\com_win\\jlyt.bat " + selectedFiles.getName());

jlyt文件夹与我的src文件夹位于同一文件夹中(我正在使用IntelliJ)。 当通过IDE运行时,一切都很好,但不是在我运行我创建的jar时。我试过从IntelliJ以及jlyt文件夹目录中保存的目录中运行它。 我没有将外部程序(在jlyt文件夹中)添加到我的jar中,因为它很重。我希望我的jar可以与原始程序一起分发,而不是包含所有内容。

知道我应该如何制作我的罐子吗?

感谢。

3 个答案:

答案 0 :(得分:0)

您必须根据jar文件使用基于jlyt.bat所在位置的相对路径。

e.g。使用“./”或“../”来导航目录树。

答案 1 :(得分:0)

我明白为什么你把/ jlyt放在/ src中,它在IDE中起到了便利作用。 / jlyt将作为资源复制到/ bin / classes或IDE目标中,并允许所有内容在IDE中运行。

当你JAR你的应用程序时,/ jlyt通常被添加到JAR;但是,Windows无法访问它。我假设您在尝试运行时将/ jlyt的副本放在与JAR相同的文件夹中。

作为第一步,在终端中,将当前目录设置为包含JAR和/ jlyt的文件夹。由于您在exec()中指定了相对路径,因此应该足以运行所有内容。

您也可以尝试创建JAR的快捷方式,因为它是可执行的,并将工作目录设置为包含JAR的文件夹。

答案 2 :(得分:0)

JAR文件的位置仅与启动JAR相关。工作目录必须是包含jlyt文件夹的目录,因为您使用'jlyt \ ...'作为可执行文件的路径。

示例,假设以下目录结构:

somewhere
    project
        gui
            appl.jar
        jlyt
            prog
                ...

工作目录必须是'project',然后JAR将被引用为'gui \ appl.jar

C:\somewhere> cd project
C:\somewhere\project> java -jar gui\appl.jar

在退出应用程序/ java之前,还要确保等待转换过程终止(例如convertProcess.waitFor()) - 我相信当Java虚拟机关闭时,任何正在运行的外部进程都会被终止!

提示过程文档:

  

从1.5开始,ProcessBuilder.start()是创建流程的首选方式。