从线程执行时更改相对路径

时间:2012-04-10 15:36:25

标签: java eclipse exec relative-path

我正在创建一个Web应用程序,在某个时刻,它启动一个新线程,该线程从命令行执行一个jar文件。 从应用程序外部调用时,命令行jar工作正常,但是当我从线程调用它时,相对路径变为C:\ eclipse \(我正在运行Eclipse中的应用程序)而不是它存储在的目录,这些混乱由于它在错误的位置查找文件,因此配置了它。

jar会创建一个日志文件,每当我尝试调用它时,我都会在日志中写入这一行:“10/04/2012 17:09:03 - java.io.FileNotFoundException:C:\ eclipse \ descriptors \ analysis_engine \ AggregateAE.xml” jar不在C:\ eclipse中。当我从提示中调用它时我没有问题,但是当它从一个新的衍生线程调用时,我有这个错误。我在生产环境中尝试过它并且我遇到了同样的问题(这次基本路径是服务器的一个)

考虑到我无法修改所有路径,可以解决这个问题吗?

编辑:这是调用jar

的线程类
public class UimaThread extends Thread {
private int mode=0;
private String path;

public UimaThread(int mode, String path){
    this.mode=mode;
    this.path=path;
}

public void run() {
    Runtime run = Runtime.getRuntime();
    try {
        Properties config = ConfigLoader.getConfig();

        String uimaPath=config.getProperty("uimaPath")+ControlPanelUtils.getDelimiter(config.getProperty("uimaPath"));
//uimaPath is the absolute path to the jar file, mode and path are just arguments passed to the jar
        run.exec("java -jar "+uimaPath+"uimachainfull.jar "+mode+" "+path); 

    }

}

运行此代码的代码是:

public void startUima() throws IOException, ServletException {
    Properties config = ConfigLoader.getConfig();
    UimaThread uimaThread = new UimaThread(2, config.getProperty("docPath"));
    uimaThread.start();
}

我需要在服务器外部异步执行此操作,我已经在stackoverflow中询问如何执行此操作,并且我被告知要执行此操作:Calling an application from a web server asynchronously

1 个答案:

答案 0 :(得分:0)

我发现了怎么做,而不是使用exec(String命令)我不得不使用exec(String命令,String [] envp,File dir),最后一个参数(dir)是可以使用的工作目录作为新论点传递