2009-12-17 54 views
1

使用RunTime.exec()时,可以指定子进程的工作目录(非常有用,如果执行的应用程序只能从它的位置启动,因为它访问例如一些本地配置文件)Method.invoke()与RunTime.exec()

如果外部应用程序是一个jar文件,on可以读取jar中的清单以获取有关主类和类路径的信息,然后调用invoke()来运行应用程序。 。

有没有办法在那里设置工作目录呢?我似乎无法找到办法做到这一点?还是我使用的Runtime.exec(),实际上使以“Java的罐子app.jar”一个电话......

在此先感谢您的帮助 大卫

+1

而不是使用runtime.exec,它会是一个解决方案,您将jar添加到classpath并直接调用jar的主类? – phtrivier 2009-12-17 16:00:06

+0

不,因为用户应该可以添加/删除外部应用程序到这个框架 – dm76 2009-12-17 16:10:23

回答

4

我会说,如果你有一个你写的应用程序,取决于工作目录的设置,你做错了。使用Class.getResourceClass.getResoruceAsStream并将填充路径传递给“main(String [])”的参数以删除路径依赖关系。

另外还有System.getProperty(“user.dir”);方法来获得工作目录,但不能调用System.setProperty(“user.dir”)来更改它。

+0

我没有写外部应用程序..这就是为什么我卡住了。我会看看Class.getResource和getResourceAsStream,看看我能用它们做些什么 – dm76 2009-12-17 16:14:17

+0

啊......如果这些应用程序已经存在并且依赖于工作目录,您可以:a)抨击编写破坏代码的开发人员然后b)使用Runtime.exec,然后c)如果您有能力修改其他应用程序而不依赖于工作目录,那么请使用Runtime.exec更改您的代码:-) – TofuBeer 2009-12-17 16:23:29

+0

把他打在了脑袋里..我喜欢那样: - )...如果我知道他是谁:-) – dm76 2009-12-17 16:27:50

1

我认为答案是否定的。恐怕你将不得不使用Runtime.exec()

0

根据Mindprod sitethis article,由于当前目录不能在整个程序执行过程中改变,因此File构造函数不需要将其嵌入到每个File对象中。