在我的程序中,我想用不同的工作目录执行一些函数(我已经加载了JAR,它使用当前目录中的文件并想要执行它)
有没有办法通过设置工作目录来执行Runnable或Thread或其他对象?
答案 0 :(得分:1)
不,工作目录与操作系统级进程相关联,您无法在程序的一部分中更改它。您必须更改目录的获取方式。
(我假设您当前要么使用System.getProperty(“user.dir”)获取目录,要么调用类似从环境获取目录的代码。)
澄清:您当然可以全局更改属性,但随后它会在所有线程中更改。我认为这不是你想要的,因为你谈论线程。
答案 1 :(得分:1)
您无法为Thread设置工作目录,但是您可以使用不同的工作目录创建新进程。 点击这里查看示例: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html
您还可以创建一个特定类型的线程,该线程具有要使用的目录的概念。 例如:
public class MyThread extends Thread
{
private final String workingDir;
public MyThread(String workingDir)
{
this.workingDir = workingDir;
}
public void run()
{
//use the workingDir variable to access the current working directory
}
}
答案 2 :(得分:0)
如果您使用System.setProperty()
设置user.dir
,则可能会有效
我认为您可以通过以下示例进行更改:
public static void main(String[] args) {
System.out.println("main: " + new File(".").getAbsolutePath());
System.setProperty("user.dir", "C:/");
Runnable r = new Runnable() {
public void run() {
System.out.println("child: "+new File(".").getAbsolutePath());
}
};
new Thread(r).start();
System.out.println("main: "+new File(".").getAbsolutePath());
}
这将产生:
主要:C:\ Projekte \ Techtests。
主要:C:\。
孩子:C:\。