2012-04-10 73 views
1

執行我正在做一個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

+0

你是如何「調用」這個JAR的?顯示代碼。 此外,我假設您知道Java Web應用程序(JEE應用程序)在技術上不允許產生自己的線程或訪問文件系統。有些容器允許它,但我確信這樣做是違反JEE規範的。 – 2012-04-10 16:42:15

+0

我已經發布了代碼。我在線程產卵和文件系統方面沒有問題。我的應用程序必須在文件系統訪問方面做很多工作。 – valepu 2012-04-12 11:14:21

回答

0

我發現如何做到這一點,而不是使用exec(String命令)我不得不使用exec(Stri ng命令,String [] envp,File dir)和最後一個參數(dir)是可以作爲新參數傳遞的工作目錄