我正在使用 JavaFX 为命令行程序制作 GUI。
如果我只是将程序打包在.JAR中,我可以调用它吗?或者我需要先将程序提取到本地机器中,然后再进行处理吗?我问这个问题是因为 .JAR 是一个 ZIP 文件,我想您不能只运行 .JAR 中的文件,因为它是压缩的或其他什么的。
最佳答案
您必须分两步完成此操作:
提取二进制文件并将其写入磁盘(因为操作系统可能只能启动该程序,如果它是磁盘上的文件)
启动程序,最好使用
ProcessBuilder
。
这是一个完整的演示:
测试.c
#include <stdio.h>
int main() {
printf("Hello world\n");
return 0;
}
测试.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.
进一步阅读:
关于java - 在Java中调用命令行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30450362/