我正在使用JavaFX为命令行程序制作GUI。
如果我只是将程序包装在.JAR中,我可以打电话吗?或者在进行处理之前是否需要先将程序提取到本地计算机中?我问,因为.JAR是一个ZIP文件,我想你不能只在.JAR里面运行一个文件,因为它是压缩的东西。
答案 0 :(得分:1)
你必须先提取你的程序让os执行它。没有办法将它“流”到ram并从那里执行。
答案 1 :(得分:1)
您必须分两步完成此操作:
提取二进制文件并将其写入磁盘(因为如果程序是磁盘上的文件,操作系统可能只能启动程序)
启动该计划,最好使用ProcessBuilder
。
<强> 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.
进一步阅读: