使用另一个具有 OpenJDK 和 JavaFX 的 Java 应用程序在网络驱动器上启动 JAVA 应用程序

问题描述 投票:0回答:1

我正在尝试从另一个应用程序启动网络驱动器上的 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% 一起使用?

java javafx runtime exec module-path
1个回答
1
投票

转义%符号并确保环境变量被正确解析。使用 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();
        }
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.