Приложение JavaFX в комплекте работает с неанглийскими аргументами и выдает "Не удалось запустить JVM"

У меня проблема с запуском простого приложения 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

Кто-нибудь решил это? Или есть кто-то, кто знает, как обойти эту проблему? Я пробовал java-версии с 1.8.40 до 1.8.72, но на каждой JVM не получалось. Это также не проблема окружающей среды, потому что я проверил это на 2 разных машинах (а также операционных системах).

Буду признателен за любую помощь.

1 ответ

В комментарии Jira упоминается, что это регрессия, начиная с версии JDK 8u40b06. Если возможно, один из способов - использовать более старый. Попробуй 8u40b05.

На данный момент, возможно, вы можете сохранить все командные аргументы в файле (названном в символах ASCII) и передать местоположение файла в качестве аргумента, чтобы прочитать фактические аргументы приложения.

Другой обходной путь (последнее средство?) Заключается в передаче символов в качестве экранированного Unicode. См. Преобразование экранированного символа Unicode обратно в реальный символ. Хотя по общему признанию это - уродливая и утомительная вещь, чтобы сделать.

Другие вопросы по тегам