【问题标题】:Bundled JavaFX application runs with non-English arguments throws "Could not start JVM"捆绑的 JavaFX 应用程序使用非英语参数运行时抛出“无法启动 JVM”
【发布时间】:2016-02-17 11:06:05
【问题描述】:

我在运行简单的 JavaFX 应用程序时遇到问题。我正在使用本机打包程序来构建 exe。我想从 windows 文件上下文菜单运行我的应用程序,但是当我尝试使用参数运行应用程序时:

> JavaFXApplication1.exe ąęć

我收到 2 个错误:

1),点击“确定”后:

2)

当我将应用程序作为 jar 文件运行时:

> java -jar JavaFXApplication1.jar ąęć

应用程序启动成功并且运行良好。

另外,当我从这个命令运行应用程序时:

> JavaFXApplication1.exe aec

一切正常,应用程序运行良好。

示例应用代码:

package test;

import javafx.application.Application;
import javafx.stage.Stage;

public class Test extends Application {

    @Override
    public void start(Stage primaryStage) {
        System.out.println("Started");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.out.println("Args count: " + args.length);
        launch(args);
    }
}

忽略,该应用程序不会关闭。

我认为这与此处描述的问题完全相同:https://bugs.openjdk.java.net/browse/JDK-8133034

有人解决了吗?或者有人知道这个问题的解决方法吗?我尝试了从 1.8.40 到 1.8.72 的 java 版本,但在每个 JVM 上都失败了。这也不是环境问题,因为我已经在 2 台不同的机器(以及操作系统)上对其进行了测试。

我将不胜感激。

【问题讨论】:

标签: java javafx locale packager


【解决方案1】:

Jira 问题在评论中提到它是从 JDK 版本 8u40b06 开始的回归。如果可能,一种解决方法是使用较旧的解决方法。试试 8u40b05。

目前,也许您可​​以将所有命令参数存储在一个文件中(以 ASCII 字符命名)并将文件位置作为参数传递,以便读取应用程序的实际参数。

另一种解决方法(最后的手段?)是将字符作为转义的 Unicode 传递。见Convert escaped Unicode character back to actual character。虽然不可否认,这是一件丑陋而乏味的事情。

【讨论】:

  • 真的很难找到 JDK 8u40b05 .. 我尝试了 JDK 的最新 beta 版本,但问题仍然存在...您对解决方法的想法很好,但是我如何从上下文菜单中做到这一点?我不能直接将非英语字符传递给 JavaFX 应用程序以将其转换为转义的 Unicode,因为应用程序不会使用此参数运行。
  • 第二个选项“将命令存储到文件”很难从单个命令中实现。 Windows 中的文件上下文菜单只能运行一个我必须在 windows reqistry 中添加的命令。那么,如何在一个命令中将参数传递给文件,保存它并使用这个文件作为参数运行应用程序......我可以在哪里保存这个文件,因为当我从实际文件夹运行应用程序时,实际路径可能包含非英文字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多