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

Java 从线程执行时更改的相对路径,java,eclipse,exec,relative-path,Java,Eclipse,Exec,Relative Path,我正在制作一个web应用程序,它在某个时刻启动一个新线程,该线程从命令行执行一个jar文件。 当从应用程序外部调用命令行jar时,它可以正常工作,但是当我从线程调用它时,相对路径变成C:\eclipse\(我从eclipse运行应用程序),而不是它存储的目录,这会弄乱它的配置,因为它在错误的位置查找文件 jar创建了一个日志文件,每当我尝试调用它时,我都会在日志中写下这一行:“10/04/2012 17:09:03-java.io.FileNotFoundException:C:\eclipse

我正在制作一个web应用程序,它在某个时刻启动一个新线程,该线程从命令行执行一个jar文件。 当从应用程序外部调用命令行jar时,它可以正常工作,但是当我从线程调用它时,相对路径变成C:\eclipse\(我从eclipse运行应用程序),而不是它存储的目录,这会弄乱它的配置,因为它在错误的位置查找文件

jar创建了一个日志文件,每当我尝试调用它时,我都会在日志中写下这一行:“10/04/2012 17:09:03-java.io.FileNotFoundException:C:\eclipse\descriptors\analysis\u 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中询问了如何执行此操作,并被告知这样做:

我发现了如何执行此操作,而不是使用exec(String命令),我必须使用exec(String命令,String[]envp,File dir)和最后一个参数(dir)是可以作为新参数传递的工作目录

您如何“调用”这个JAR?显示代码。另外,我假设您知道Java web应用(JEE应用)在技术上不允许生成自己的线程或访问文件系统。一些容器允许这样做,但我很确定这样做是违反JEE规范的。我已经发布了代码。我在线程生成和文件系统方面没有问题。我的应用程序必须与文件系统访问一起工作。