執行我正在做一個Web應用程序,在某一點,開始一個新的線程,該線程執行命令行一個jar文件時被改變。從應用程序外部調用時 命令行罐子工作正常,但是當我從線程調用它的相對路徑變爲C:\日食\(我運行Eclipse中的應用程序),而不是它的存儲在目錄中,這因爲它在錯誤的地方查找文件,所以它的配置出現混亂。相對路徑從一個線程
該jar創建一個日誌文件,每當我嘗試調用它時,我都會將這行代碼寫入日誌:「2012年10月4日17時09分03秒 - java.io.FileNotFoundException:C:\ eclipse \ descriptors \ analysis_engine \ AggregateAE.xml「 該jar不在C:\ eclipse中。當我從提示中調用它時,我沒有任何問題,但是當它從新產生的線程調用時,我有這個錯誤。我試過它在生產環境,我有同樣的問題(這次基本路徑是服務器的一個)
考慮到我無法修改所有的路徑,有什麼可以解決這個問題?
編輯:這是線程類調用罐子
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();
}
我需要這是asyncronously執行和服務器外,我問如何做到這一點在這裏在計算器中,我已被告知這樣做:Calling an application from a web server asynchronously
你是如何「調用」這個JAR的?顯示代碼。 此外,我假設您知道Java Web應用程序(JEE應用程序)在技術上不允許產生自己的線程或訪問文件系統。有些容器允許它,但我確信這樣做是違反JEE規範的。 – 2012-04-10 16:42:15
我已經發布了代碼。我在線程產卵和文件系統方面沒有問題。我的應用程序必須在文件系統訪問方面做很多工作。 – valepu 2012-04-12 11:14:21