我正在尝试从另一个应用程序启动网络驱动器上的 jar 文件。对于 Java 1.8,这可以正常工作。当切换到 OpenJDK 加 JavaFX 时,程序的启动会延迟 10-20 秒。 问题是它只有在 JavaFX 也位于网络驱动器上时才有效。然后所有模块都必须通过网络加载,这需要花费大量时间。 通过批处理文件,它可以与本地 javaFX 安装一起使用:
java --module-path="%JAVA_FX%\lib" --add-modules javafx.controls,javafx.fxml -jar myApplcationOnNetworkfolder.jar
但是在startApplication.jar中以下代码不起作用:
String cmd = "java --module-path=\"%JAVA_FX%\\lib\" --add-modules javafx.controls,javafx.fxml -jar myApplicationonNetworkfolder.jar";
String[] env = {""};
String directory = "network-folder";
if (directory != null) {
File dir = new File(directory);
if (dir.exists()) {
Process process = Runtime.getRuntime().exec(cmd, env, dir);
}}
它适用于以下命令行:
String cmd = "java --module-path lib --add-modules javafx.controls,javafx.fxml -jar myApplicationonNetworkfolder.jar";
如果 JavaFX 安装在网络驱动器上的目标文件夹中,则此方法有效。但需要很多时间。
如何调整 cmd 字符串才能使其也与 %JAVA_FX% 一起使用?
转义%符号并确保环境变量被正确解析。使用 System.getenv() 方法检索 JAVA_FX 环境变量的值
String javaFxPath = System.getenv("JAVA_FX");
if (javaFxPath == null) {
// Handle the case when JAVA_FX environment variable is not set
System.err.println("JAVA_FX environment variable is not set.");
return; // Or handle it as appropriate for your application
}
String cmd = "java --module-path=\"" + javaFxPath + "\\lib\" --add-modules javafx.controls,javafx.fxml -jar myApplicationonNetworkfolder.jar";
String[] env = {}; // No need to provide an empty environment array
String directory = "network-folder";
if (directory != null) {
File dir = new File(directory);
if (dir.exists()) {
try {
Process process = Runtime.getRuntime().exec(cmd, env, dir);
// You may also want to read the process output or wait for the process to finish
} catch (IOException e) {
// Handle any potential IOException
e.printStackTrace();
}
}
}