如何从我的Java应用程序运行Java应用程序?

如何从我的Java应用程序运行Java应用程序?,java,linux,processbuilder,Java,Linux,Processbuilder,我有两个java应用程序(1,2),希望从应用程序1运行应用程序2。首先,我尝试创建应用程序2的.jar文件,并使用ProcessBuilder运行它。直到我想在应用程序2中搜索一些东西,一些缺少包的东西 然后我想我可以在应用程序1中从ProcessBuilder运行application2.java,但这似乎不是正确的方法?现在我遇到了错误,缺少包,但处于早期阶段(应用程序根本没有启动) 我在Ubuntu上做这个。有什么建议吗?添加应用程序。2到应用程序的运行时类路径。1并直接调用其类或方法,

我有两个java应用程序(1,2),希望从应用程序1运行应用程序2。首先,我尝试创建应用程序2的.jar文件,并使用
ProcessBuilder
运行它。直到我想在应用程序2中搜索一些东西,一些缺少包的东西

然后我想我可以在应用程序1中从
ProcessBuilder
运行application2.java,但这似乎不是正确的方法?现在我遇到了错误,缺少包,但处于早期阶段(应用程序根本没有启动)


我在Ubuntu上做这个。有什么建议吗?

添加应用程序。2到应用程序的运行时类路径。1并直接调用其类或方法,这将是获得最佳反馈的最简单方法(即,您可能会看到
NoClassDefFoundError ThisIsTheMissingClassName
),而不是获得“exit value 1”。

好的,现在这两个应用程序位于不同的工作区,这会导致任何问题吗?在IntelliJ中,我使用构建-编辑配置,但不能添加不在同一工作区中的任何内容。当然,如果这是正确的方式,你听说过“尾巴摇狗”这个说法吗?这似乎适用于这里,IntelliJ是尾巴,而你是狗。我假设您是在有2个(或更多)jar的情况下执行此操作的,并且不认为这与IDE有任何关系。我的意思是,想想看,最终用户是否需要安装IntelliJ来运行应用程序。1?不,这不是一件理想的事情,但是现在将应用程序2导出到.jar会给我关于缺少包的错误。此应用程序不是由我创建的,导致缺少包的一些依赖项是该应用程序内部的外部JAR。这就是为什么我想在IDE上运行它,也许以后我可以关注如何创建JAR(这确实是最好也是唯一的好解决方案)。在这种情况下,也许你应该问一个完全独立的问题,并附上IntelliJ标签。虽然我确信它是一个很棒的IDE(我听说它比我使用的Netbeans或Eclipse都好),但我不使用IntelliJ,也不提供IDE方面的帮助。我觉得我的时间和专业知识最好花在我擅长的主题上——Java和Swing;app2.jar main.class.of.app2或根据需要修改app2.jar的属性app2应该是独立的应用程序还是app1的扩展/插件?如果是后者,则最好在app1中的新类加载器中加载jar。在primer案例中,它们是应该相互通信(使用序列化或套接字),还是app2只是在计算作为输出返回的内容?后一种情况:
processproc=Runtime.getRuntime().exec(“/bin/bash”、“-c”、“传递给应用程序的java-jar App2.jar参数”);//读取由proc.getInputStream()获取的输入流
Application2使用应用程序1生成的XML文件来可视化Wordnet中的特定术语。我已经尝试过:ProcessBuilder pb=newprocessbuilder(“myjar.jar”);这将运行jar并打开程序。但是,当应用程序2试图定位wordnet资源时,我遇到了一些错误:线程“AWT-EventQueue-0”edu.smu.tspell.wordnet.impl.file.retrievaleException中的异常:打开索引文件时出错:resources/wordnet-3.0/dict/index.sense(没有这样的文件或目录)我很确定jar中包含wordnet文件,但不知何故,路径可能是错误的。
resources/WordNet-3.0/dict/index.sense
听起来像是一个专家式的结构。我相当确定在您的jar中没有
resources/。
目录,因此它将无法定位资源。用f.e.7-zip打开app2.jar,看看是否有
/Wordnet-3.0/dict/index.sense
条目-如果是这样,您需要修改app2,通过
getClass().getResource(“/Wordnet-3.0/dict/index.sense”)加载资源而不是试图通过
src/resources/…
加载它,我添加了一个空文件夹resources(在intelliJ中),并在地图中添加了wordnet,希望它能工作,因此resources/wordnet-3.0/dict/index.sense是存在的。仅仅因为它存在于IntelliJ中并不意味着它存在于jar中,并且jar正在尝试查找所需的资源而不是IntelliJ!在使用maven进行依赖关系管理和/或部署时,通常会有一个项目结构,其中包含一个
/src/main/resources/…
结构,其中此目录中列出的每个文件都会复制到jar中-由于您可能不使用类似的内容,如何将其复制到jar中?