私のプログラムでは、別の作業ディレクトリでいくつかの関数を実行したい (現在のディレクトリ内のファイルを操作する JAR をロードして実行したい)
作業ディレクトリを設定して Runnable または Thread またはその他のオブジェクトを実行する方法はありますか?
私のプログラムでは、別の作業ディレクトリでいくつかの関数を実行したい (現在のディレクトリ内のファイルを操作する JAR をロードして実行したい)
作業ディレクトリを設定して Runnable または Thread またはその他のオブジェクトを実行する方法はありますか?
いいえ、作業ディレクトリは OS レベルのプロセスに関連付けられています。プログラムの一部で変更することはできません。ディレクトリの取得方法を変更する必要があります。
(現在、System.getProperty("user.dir") でディレクトリを取得するか、同様に環境からディレクトリを取得するコードを呼び出すと仮定します。)
明確化: もちろん、プロパティをグローバルに変更できますが、すべてのスレッドで変更されます。スレッドについて話しているので、これはあなたが望むものではないと思います。
スレッドの作業ディレクトリを設定することはできませんが、別の作業ディレクトリで新しいプロセスを作成することはできます。ここで例を確認してください: 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
}
}
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:\.