Приложение JavaFX: файл FXML не найден

У меня есть приложение, упакованное в виде файла JAR. Запуск java -jar myapp.jar работает нормально. Я хочу запустить это приложение в браузере, поэтому я создал файлы JNLP и HTML с помощью команды javapackage.

Я внес свой file:// URL в белый список, включил консоль для вывода отладки, и вот что я вижу:

FXML resource = null
load fxml
java.lang.IllegalStateException: Location is not set.
   at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2438)
   at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2413)
   :

Соответствующий код:

public class Main extends Application
{
    @Override
    public void start(Stage stage) {
        try {
            System.out.println("FXML resource = " + getClass().getResource("Main.fxml"));
            FXMLLoader fxml_loader = new FXMLLoader(getClass().getResource("Main.fxml"));
            Controller controller = new Controller(stage);
            fxml_loader.setController(controller);
            System.out.println("load fxml");
            Parent root = fxml_loader.load(); 
            :

Я убедился, что Main.xml правильно расположен и правильно назван в файле jar (помните, что запуск файла jar из java работает).

Почему файл Main.fxml не отображается при запуске приложения с веб-запуском? (javaws myapp.jnlp выдает ту же ошибку)

Я что-то упустил или это ошибка JavaFX и JNLP?

программное обеспечение: Java 8 u51, Linux Centos 6 64 бит.

Обновить

Я подписал свой jar-файл, добавил Permissions: sandbox и Codebase: * в свой манифест, добавил <security><all-permissions/></security> в свой .jnlp, установил максимально разрешительные параметры панели управления, безрезультатно внес свой URL-адрес (file:/) в белый список. Мое приложение заблокировано по «соображениям безопасности». Это не расстраивает.


person sebnukem    schedule 17.07.2015    source источник


Ответы (1)


Может быть, ваш jar-файл не подписан?

По умолчанию веб-приложения запускаются в песочнице. Чтобы запросить повышенные разрешения, используйте тег. Обратите внимание, что для предоставления разрешений файлы JAR приложения должны быть подписаны, а пользователь должен доверять сертификату безопасности, используемому для подписи. Если приложение запрашивает повышенные разрешения, но требования к пользователю, предоставляющему разрешения, не выполняются, приложение не запустится.

Перед добавлением кода для подписи приложения убедитесь, что подписание необходимо, поскольку оно требует дополнительных затрат на выполнение проверки и часто приводит к отображению дополнительных диалоговых окон для конечного пользователя при запуске приложения. См. Раздел 3.2.4, «Запуск в тестовой среде без подписи и доверия», чтобы узнать, когда приложению требуются повышенные разрешения.

См. http://docs.oracle.com/javafx/2/deployment/packaging.htm#BABJGFB

Также ознакомьтесь с https://docs.oracle.com/javase/tutorial/deployment/jar/signindex.html

person chrisw    schedule 17.07.2015
comment
Может быть, но приложение занесено в белый список, принято и запускается без проблем. Тогда у меня эта ошибка времени выполнения ... - person sebnukem; 18.07.2015
comment
Я предположил, что если ваш jar пытается загрузить ресурс, ему могут потребоваться повышенные разрешения, даже если он находится внутри того же jar, сам метод может потребовать повышения. - person chrisw; 18.07.2015
comment
Спасибо, jewelsa. Это полезно. Так что это, в конце концов, ошибка Java. - person sebnukem; 19.07.2015