首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Java程序从它的目录执行java

使用Java程序从它的目录执行java
EN

Stack Overflow用户
提问于 2015-04-21 16:15:40
回答 1查看 60关注 0票数 0

一旦执行了这个jar,我将尝试使用ClassLoader执行另一个java jar。它在它的目录中查找某些文件。

启动此jar时,如何设置工作目录?

在启动jar之前,我使用了System.setProperty("user.dir", "C:\\abc");,但是,它不起作用。

我试图在另一个线程中启动jar,在启动jar之前,我尝试设置工作目录。

代码语言:javascript
运行
复制
System.setProperty("user.dir", "C:\\abc");
File jarfile = new File("myjar.jar");
Manifest manifest = jar.getManifest();
Attributes attrs = manifest.getMainAttributes();
String mainClassName = attrs.getValue(Attributes.Name.MAIN_CLASS);
URL url = new URL("file", null, jarfile.getCanonicalPath());
ClassLoader cl = new URLClassLoader(new URL[] { url });
Class<?> mainClass = cl.loadClass(mainClassName);
Method mainMethod = mainClass.getMethod("main", new Class[] { String[].class });
mainMethod.setAccessible(true);
int mods = mainMethod.getModifiers();

   if (mainMethod.getReturnType() != void.class
        || !Modifier.isStatic(mods) || !Modifier.isPublic(mods)) {
    throw new NoSuchMethodException("main");
}
String[] args2 = new String[1];
args2[0] = "service=slave";
mainMethod.invoke(mainClass, new Object[] { args2 });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-21 16:39:01

如果在java应用程序中给主方法开发票,就不会启动新的Java应用程序。

在这种情况下,您将执行一个静态方法,就像任何其他静态方法一样,因此当前目录与当前Java应用程序的工作目录相同。

如果您正在寻找在现有java应用程序中执行Java应用程序的方法,则必须创建另一个进程。

举个例子:

代码语言:javascript
运行
复制
    List<String> command = new ArrayList<String>();
    command.add("java -jar xxxxx.jar");
    command.add("argument to Main method");
    command.add("another argument to Main method");

    ProcessBuilder builder = new ProcessBuilder(command);

    File workingDirectory = new File("/myworkingdirectory");
    builder.directory(workingDirectory);

    Process process = builder.start();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29777793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档