Связанное приложение 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 это не сработало. Это также не проблема среды, потому что я тестировал ее на двух разных машинах (а также на операционных системах).

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


person Krzysiek    schedule 16.11.2015    source источник
comment
Вы пытались установить локаль JVM? stackoverflow.com/questions/8809098/   -  person Leonardo    schedule 24.11.2015
comment
да. Это также терпит неудачу.   -  person Krzysiek    schedule 25.11.2015


Ответы (1)


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

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

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

person M A    schedule 22.11.2015
comment
Очень сложно найти JDK 8u40b05. Я попробовал последнюю бета-версию JDK, но проблема все еще существует... Вы думаете об обходном пути, но как я могу сделать это из контекстного меню? Я не могу напрямую передать неанглийский символ приложения JavaFX, чтобы преобразовать его в экранированный Unicode, потому что приложение не будет работать с этими аргументами. - person Krzysiek; 22.11.2015
comment
Команды хранения второй опции в файл трудно получить с помощью одной команды. Контекстное меню файла в Windows может запускать только одну команду, которую я должен добавить в реестр Windows. Итак, как в одной команде передать аргументы в файл, сохранить его и запустить приложение с этим файлом в качестве параметра... И где я могу сохранить этот файл, потому что, когда я буду запускать приложение из реальной папки, есть вероятность, что фактический путь будет содержать неанглийские символы. - person Krzysiek; 22.11.2015