2012-05-03 29 views
0

在我的節目,我想執行不同的工作目錄中的某些功能(我已經加載JAR與文件工作在當前目錄下,並希望執行它)運行可運行不同的工作目錄

有沒有一種辦法通過設置工作目錄執行Runnable或Thread或其他對象?

+0

看到http://stackoverflow.com/questions/6811522/changing-the-working-directory-of-command-from-java – JoseK

+0

它的運行系統,但我有'對象過程'方法 – skayred

回答

1

不,工作目錄與操作系統級進程相關聯,您不能在程序的一部分中對其進行更改。你將不得不改變目錄的獲取方式。

(我假設你現在要麼獲得與System.getProperty(「user.dir來」的目錄),或調用代碼,同樣從環境中獲取的目錄。)

澄清:你當然可以改變的全局屬性,但隨後它在所有線程中都會更改。我認爲這不是你想要的,因爲你談論線程。

0

它可以工作,如果你設置了user.dirSystem.setProperty()

我想你可以用下面的例子更改:

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。

main:C:\。

孩子:C:\。

+1

設置屬性是全局性的,不是與線程隔離的。 – njlarsson

+0

正如我的例子所示。 –

+0

好吧,但我認爲這個問題的含義是在不同的線程中有不同的工作目錄。 – njlarsson

1

您無法爲線程設置工作目錄,但是您可以使用不同的工作目錄創建新進程。 這裏檢查一個例子: 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 
    } 
}