2015-12-22 78 views
2

我在RAD中有一個項目。包是inputFileEdit,我需要的java類是InputFileTest.java。如何使用另一個Jar中的參數調用Java類,多次並行

package inputFileEdit; 

public class InputFileTest { 

    public static void main(String[] args) { 
     String var1 = args[0]; 
     String var2 = args[1].toLowerCase(); 

     // do stuff with args 
    } 
} 

我想創建一個新的包/ Java程序,它可以調用或實例化類InputFileTest以上,具有自變量,並行多次。我基本上要帶回一個字符串列表,循環遍歷該列表以創建並行線程,列表中的每一行都調用InputFileTest。

問題1)調用InputFileTest的最佳方法是什麼?我正在使用RAD,並且我創建了一個新的Project,一個名爲CallerPackage的包,以及該包內的一個Caller.java?我還通過Java Build Path - > Libraries - > Add External Jars在/ lib下包含了整個InputFileEdit項目的「Jar」。我不知道如何調用帶參數的類(我想是這樣InputFileEdit ifeObj = new InputFileEdit("parm 1", "parm 2");InputFileEdit ifeObj = new InputFileEdit("parm 1 parm 2");),但既不工作所以後來我想就叫罐子像Process p = Runtime.getRuntime().exec("java -jar /lib/InputFileEdit.jar parm1 parm2");或因爲我想實際的類InputFileTest,Process p = Runtime.getRuntime().exec(new String[]{"java","-cp","/lib/InputFileEdit.jar", "InputFileTest", "parm1","parm1"});

package CallerPackage; 

import java.io.BufferedInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
//import inputFileEdit.*; 

public class Caller { 

    static int i = 0; 

     public static void main(String args[]) throws IOException, InterruptedException { 
      try { 
       System.out.println("Calling jar"); 
       Process p = Runtime.getRuntime().exec("java -jar /lib/InputFileEdit.jar parm1 parm2"); 

BufferedInputStream errStrm = new BufferedInputStream(p.getErrorStream()); 

       // get the error stream of the process and print it 
       for (int i = 0; i < errStrm.available(); i++) { 
        System.out.println("" + errStrm.read()); 
       } 

       System.out.println("Called jar"); 

       p.destroy(); 

      } 
      catch (Exception ex) { 
       ex.printStackTrace(); 
      } 

     } 
} 

但這似乎不工作或打印出任何有用的東西。任何關於這方面最好的方法的想法?在我循環訪問我的列表並調用它們之前,我只是試圖讓1個調用工作。最終它將通過字符串數組列表來調用jar /類循環。

回答

0

,你應該能夠調用的主要方法InputFileTest以同樣的方式,你會調用任何其他靜態方法:InputFileTest.main(args);

然而,通常直接調用主要是不可取的。如果可以的話,我建議你把InputFileTest的main中的代碼放入另一個更具描述性的方法中,比如processFiles

+0

原因是,inputFileEdit包有10個java文件,1是帶有該主的InputFileTest.java。如果我只是調用main,當試圖訪問其他文件時,我會得到一個NoClassDefFoundError。你認爲我應該在原始項目中添加一個新的包,使用java來調用上面的inputFileEdit包多次?我做了一個新項目(CallerProject)來做到這一點,但也許這沒有意義或使其更加複雜。 – Paul

+0

@Paul我很難知道你的情況的具體情況,但我相信你實際上想要做的事情可能是在你想要調用的課程的同一個項目中創建你的新課程。那麼你應該可以按照答案中的描述調用方法。 – clearlyspam23

相關問題