我正在制作一个 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