用Java调用命令行程序

时间:2015-05-26 05:46:40

标签: java

我正在使用JavaFX为命令行程序制作GUI。

如果我只是将程序包装在.JAR中,我可以打电话吗?或者在进行处理之前是否需要先将程序提取到本地计算机中?我问,因为.JAR是一个ZIP文件,我想你不能只在.JAR里面运行一个文件,因为它是压缩的东西。

2 个答案:

答案 0 :(得分:1)

你必须先提取你的程序让os执行它。没有办法将它“流”到ram并从那里执行。

答案 1 :(得分:1)

您必须分两步完成此操作:

  1. 提取二进制文件并将其写入磁盘(因为如果程序是磁盘上的文件,操作系统可能只能启动程序)

  2. 启动该计划,最好使用ProcessBuilder

  3. 这是一个完整的演示:

    <强> test.c的

    #include <stdio.h>
    
    int main() {
        printf("Hello world\n");
        return 0;
    }
    

    <强> Test.java

    import java.io.*;
    import java.nio.file.*;
    import java.nio.file.attribute.PosixFilePermission;
    import java.util.Collections;
    
    public class Test {
        public static void main(String[] args) throws Exception {
    
            Path binary = Paths.get("mybinary");
            Files.copy(Test.class.getResourceAsStream("mybinary"), binary);
    
            System.out.println("Launching external program...");
    
            // Needed for Linux at least
            Files.setPosixFilePermissions(binary,
                    Collections.singleton(PosixFilePermission.OWNER_EXECUTE));
    
            Process p = new ProcessBuilder("./mybinary").inheritIO().start();
            p.waitFor();
            System.out.println("External program finished.");
        }
    }
    

    <强>演示

    $ cc mybinary.c -o mybinary
    $ ./mybinary
    Hello world
    $ javac Test.java
    $ jar -cvf Test.jar Test.class mybinary
    $ rm mybinary Test.class
    $ ls
    mybinary.c  Test.jar  Test.java
    $ java -cp Test.jar Test
    Launching external program...
    Hello world
    External program finished.
    

    进一步阅读: