我为其他人开发的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可以与原始程序一起分发,而不是包含所有内容。
知道我应该如何制作我的罐子吗?
感谢。
答案 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()是创建流程的首选方式。