JavaFX, Gluon: HTML-файл не загружается из кода Java в APK

У меня есть проект Gluon JavafX на Intellij Idea после установки плагина Gluon, в котором я загружаю некоторые статические файлы HTML в браузер JavaFX Webkit.

Теперь, когда я запускаю приложение JavaFX напрямую, я вижу загружаемый HTML, но когда я создаю APK, я не вижу загружаемого HTML. Я пробовал два пути, то есть html/index.html и index.html, но для обоих APK мне ничего не показывал в приложении, он просто загружал черный экран.

В соответствии с предыдущим вопросом, который у меня был о Gluon, я переместил статический контент в каталог ресурсов. Это сильно увеличило размер APK и стало подтверждением того, что статический контент находится внутри APK.

Вот главный класс:

@Override
public void start(Stage primaryStage) throws Exception{
    primaryStage.setTitle("Rewe - Frontend");
    java.net.CookieManager manager = new java.net.CookieManager();
    java.net.CookieHandler.setDefault(manager);

    myBrowser = new MyBrowser();
    scene = new Scene(myBrowser, 1080, 1920);

    primaryStage.setScene(scene);
    primaryStage.setFullScreen(true);
    primaryStage.show();

}

Mybrowser.Java:

public class MyBrowser extends Region {

    final String hellohtml = "index.html";

    WebView webView = new WebView();
    WebEngine webEngine = webView.getEngine();
public MyBrowser() {
        webEngine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> {
            if (newValue == Worker.State.SUCCEEDED) {
                JSObject window = (JSObject) webEngine.executeScript("window");
                window.setMember("app", this);
            }
        });

        URL urlHello = getClass().getResource(hellohtml);

        webEngine.load(urlHello.toExternalForm());
        webView.setPrefSize(1080, 1920);
        webView.setContextMenuEnabled(false);
}

Вот снимок экрана, на котором показаны статические файлы в соответствующих папках, а также файлы Java:

введите описание изображения здесь

Тогда почему, когда я открываю APK, я просто вижу черный экран. Я просто поместил «Hello world» в body из index.html, даже это не отображается. Любая помощь была бы хороша. Спасибо.

Обновить

Журнал ошибок с adb:

: QuantumRenderer: shutdown
02-12 12:49:24.539 13109 13132 W System.err: java.lang.reflect.InvocationTargetException
02-12 12:49:24.540 13109 13132 W System.err:    at java.lang.reflect.Method.invoke(Native Method)
02-12 12:49:24.540 13109 13132 W System.err:    at javafxports.android.DalvikLauncher$1.run(DalvikLauncher.java:188)
02-12 12:49:24.540 13109 13132 W System.err:    at java.lang.Thread.run(Thread.java:818)
02-12 12:49:24.540 13109 13132 W System.err: Caused by: java.lang.RuntimeException: Exception in Application start method
02-12 12:49:24.540 13109 13132 W System.err:    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
02-12 12:49:24.540 13109 13132 W System.err:    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$137(LauncherImpl.java:182)
02-12 12:49:24.540 13109 13132 W System.err:    at com.sun.javafx.application.LauncherImpl.access$lambda$1(LauncherImpl.java)
02-12 12:49:24.540 13109 13132 W System.err:    at com.sun.javafx.application.LauncherImpl$$Lambda$2.run(Unknown Source)
02-12 12:49:24.540 13109 13132 W System.err:    ... 1 more
02-12 12:49:24.540 13109 13132 W System.err: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.net.URL.toExternalForm()' on a null object reference
02-12 12:49:24.541 13109 13132 W System.err:    at com.rewetest.MyBrowser.<init>(MyBrowser.java:69)
02-12 12:49:24.541 13109 13132 W System.err:    at com.rewetest.Main.start(Main.java:30)
02-12 12:49:24.541 13109 13132 W System.err:    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$144(LauncherImpl.java:863)
02-12 12:49:24.541 13109 13132 W System.err:    at com.sun.javafx.application.LauncherImpl.access$lambda$8(LauncherImpl.java)
02-12 12:49:24.541 13109 13132 W System.err:    at com.sun.javafx.application.LauncherImpl$$Lambda$9.run(Unknown Source)
02-12 12:49:24.541 13109 13132 W System.err:    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$157(PlatformImpl.java:326)

person We are Borg    schedule 12.02.2016    source источник
comment
Вы пробовали на своем рабочем столе? Если он не работает на рабочем столе, то это из-за известной ошибки.   -  person José Pereda    schedule 12.02.2016
comment
@ JoséPereda: Когда у меня есть только проект JavaFX без Gluon, он отлично работает. Теперь, когда я загружаю проект как приложение, я просто получаю сообщение об ошибке, Android SDK не указан. Хотя я указал в jfxMobiel {android {// здесь}}.   -  person We are Borg    schedule 12.02.2016
comment
@ JoséPereda: Я могу предоставить вам файлы Java для Main и MyBrowser. Можете ли вы просто попробовать собственный HTML-код, чтобы увидеть, какие пути работают?   -  person We are Borg    schedule 12.02.2016
comment
Вы можете запустить его на рабочем столе или нет? Чтобы работать на Android, сначала он должен быть запущен и на рабочем столе. Просто выберите задачу run на вкладке Gradle и посмотрите, работает ли она. Если нет, сначала устраните проблемы.   -  person José Pereda    schedule 12.02.2016
comment
Я могу работать на рабочем столе .. Нет проблем.   -  person We are Borg    schedule 12.02.2016
comment
ок, а на Андроиде у тебя черный экран? Затем вам нужно выяснить причину этого. Когда ваше устройство подключено, в командной строке перейдите к Android sdk / platform-tools, запустите ./adb logcat -v threadtime и попытайтесь найти исключение в выводе вашего приложения.   -  person José Pereda    schedule 12.02.2016
comment
@ JoséPereda: Я обновил свой основной пост, добавив в него журнал ошибок. Похоже на проблему пути, как я могу определить index.html. Как указано в основном сообщении, я пробовал два варианта, ни один из них не работал.   -  person We are Borg    schedule 12.02.2016


Ответы (1)


Если вы используете

webEngine.load(getClass().getResource("index.html").toExternalForm()); 

вам нужно поместить ресурсы в тот же пакет, что и этот класс:

src/main/resources/com/<your package>

или если вы хотите поместить его в другую папку, используйте "/" в качестве корня ресурсов:

webEngine.load(getClass().getResource("/html/index.html").toExternalForm());

Это решит NPE.

Я не вижу этого в вашем коде, но полагаю, что вы добавляете WebView в сцену:

public MyBrowser() {
     ...
     getChildren().add(webView);
}
person José Pereda    schedule 12.02.2016
comment
Если я помещу его в src / java / resources / com / package-name, как раньше, где вы сказали, что не можете видеть файлы Java, тогда APK не подберет его. Я должен поместить его в src / main / resources, чтобы его подхватил APK. У меня есть конструктор, который вы упомянули в коде, и в этом плане проблем нет. - person We are Borg; 12.02.2016