如何从另一个java程序中运行.jar文件?

时间:2009-11-25 04:49:05

标签: java

我有一个.jar文件,我可以在命令行上运行:

java -jar myFile.jar argument1

我想将此.jar的输出保存为另一个java程序中的String变量。

我该怎么做?

我尝试在我的程序中包含myFile.jar作为参考,并在我的程序中执行myFile.main(new String{"argument1"})。但这只是将结果打印到控制台,我无法在程序中使用结果。

希望这不会太混乱。

4 个答案:

答案 0 :(得分:1)

运行Jar文件要求您在类路径中包含jar文件。这可以在运行时使用URLClassLoader完成。只需使用jar作为URL之一构造URLClassLoader。如果您知道班级名称(当然是全名),请调用forClass(...)。或者使用'findResources(String name)'检查清单文件。

获得课程后,您可以使用反射来获取其静态方法main

再次看到你的问题,你知道了类名,所以如果你确定jar文件已经在类路径中了,那么你可以在尝试时调用它。

II

要捕获输出,您可以调用System.setOut(PrintStream out)System.setErrPrintStream out)来更改打印流。您可以传递您创建的打印流。像这样:

ByteArrayOutputStream BAOS = new ByteArrayOutputStream();
PrintStream MyOut = new PrintStream(BAOS);
System.setOut(MyOut);

// Do something to have something printed out.
...

String TheCaptured = new String(BAOS.toByteArray());

希望这有帮助。

答案 1 :(得分:0)

作为Jar文件,您可以将其添加到类路径中并调用自己的程序功能。你可能需要更多地了解Jar背后的逻辑,以便在不输出信息的情况下使用它。

我相信你要找的是如何shell执行Jar档案。一个例子可以be found here.

答案 2 :(得分:0)

看一下ProcessBuilder:

http://java.sun.com/javase/6/docs/api/java/lang/ProcessBuilder.html

它有效地创建了一个操作系统进程,然后您可以使用以下方法捕获输出:

process.getInputStream()

该行:

processbuilder.redirectErrorStream(true)

将在以下示例中合并输出流和错误流:

e.g。

public class ProcessBuilderExample {

    public ProcessBuilderExample() {
        // TODO Auto-generated constructor stub
    }
    public static void main(String[] args) throws IOException, InterruptedException {

        ProcessBuilder pb = new ProcessBuilder("java", "-jar", "gscale.jar");
        pb.redirectErrorStream(true);
        pb.directory(new File("F:\\Documents and Settings\\Administrator\\Desktop"));

        System.out.println("Directory: " + pb.directory().getAbsolutePath());
        Process p = pb.start();
        InputStream is = p.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        for (String line = br.readLine(); line != null; line = br.readLine()) {
                System.out.println( line ); // Or just ignore it
        }
        p.waitFor();                    
    }
}

答案 3 :(得分:0)

如果你不能包括其他jar,

你可以使用类似的东西

Runtime re = Runtime.getRuntime();
BufferedReader output;          
try{ 
  cmd = re.exec("java -jar MyFile.jar" + argument); 
  output =  new BufferedReader(new InputStreamReader(cmd.getInputStream()));
} catch (IOException ioe){
  ioe.printStackTrace();
}
String resultOutput = output.readLine();

我知道我的代码并不像捕捉异常那样完美,但我认为这可以给你一个好主意。