2015-12-01 83 views
0

我有一個activeMq服務器和此服務器的偵聽器。在我的聽衆中,我嘗試啓動一個可運行的jar文件。不能在我的Java程序中運行jar,沒有結果沒有錯誤

String[] args = new String[]{ 
    "java", 
    "-jar", 
    "HelloWorld.jar"}; 

try { 
    ProcessBuilder pb = new ProcessBuilder(args); 
    Process p = pb.start(); 

    System.out.println("Start encrypt with: " + String.join(" ", args)); 

} catch (Exception e) { 
    System.out.println(e.getMessage()); 
} 

我的HelloWorld.jar

public class HelloWorld { 

public static void main(String[] args) { 
    File file = new File("/tmp/test/test.txt"); 
    file.mkdirs();  
} 

}

如果我在服務器寫一個隊列,聽者開始,我可以看到「的System.out.println(「開始使用加密*)」命令‘HTOP’我能看到的過程,但‘的console.log’沒有建立。 任何人的想法?

很抱歉的瘸腿英語。

回答

0

我解決了這個問題。謝謝您的幫助。沒有幫助,我沒有找到答案。

問題是我的pom.xml中的dependency-Entry。 我改變了從activemq-all到activemq-core的入口,它工作。

<dependency> 
     <groupId>org.apache.activemq</groupId> 
     <artifactId>activemq-core</artifactId> 
     <version>5.7.0</version> 
    </dependency> 

問題是activemq-all庫中的spring-library。有一個版本崩潰。

0

輸入/輸出重定向是命令shell(cmd,bash,whatever)固有的一項功能。 java.exe不知道這件事。相反,然後由您的應用程序啓動的進程可以訪問其InputStream和OutputStream

所以如果你想輸出寫入console.log,你需要讀取你的進程'InputStream並自己寫入console.log

首先嚐試這種方式,以確保您的讀取並不阻礙進展:

try { 
    ProcessBuilder pb = new ProcessBuilder(args); 
    Process p = pb.start(); 

    System.out.println("Start encrypt with: " + String.join(" ", args)); 

} catch (Exception e) { 
    System.out.println(e.getMessage()); 
} 
+0

我改變了它。對於我來說,重定向流是不重要的。問題是jar沒有運行。如果我在cmd或bash中輸入命令,它將完美運行。 –

+0

即使你在課堂上註釋掉所有流式閱讀,情況就是如此?我想這可能會阻止你。 – Jan

+0

好的,我註釋掉了流式閱讀,但沒有改變。 –

相關問題