Преобразование приложения JavaFX в Android APK — проблемы с загрузкой HTML-файла Google Maps

Я пытаюсь перенести приложение, написанное на JavaFX, на Android, и по большей части мои попытки увенчались успехом. В том, что приложение будет работать на Android после упаковки файла apk с использованием среды IDE Netbeans и Gradle.

Но у меня проблема в том, что приложение вылетает при попытке доступа к карте Google через компонент JavaFX Webview. В JavaFX я использую следующее:

googleMapEngine.load(getClass().getResource("/googleLondonMap.html").toExternalForm());

HTML-файл находится в папке Resources в корневой папке Gradle.

Когда я тестирую приложение в Netbeans, щелкнув правой кнопкой мыши корневой узел Gradle и выбрав «Задачи» -> «Выполнить» -> «Выполнить». Мое приложение работает отлично, включая доступ к карте Google с использованием html-файла и JavaFX Webview.

Создание файла apk также успешно выполняется с помощью Задачи --> Android --> Android. Но как только я устанавливаю файл apk на устройство Android и получаю доступ к части карты Google моего приложения, он выбрасывает меня из приложения с надписью «К сожалению, остановился». Любые подсказки о том, как это исправить?

Глядя на файл журнала, созданный с помощью команды adb, я увидел следующий вывод:

E/AndroidRuntime( 6038): FATAL EXCEPTION: JavaFX Application Thread

E/AndroidRuntime( 6038): Process: com.SundaeThePugApp, PID: 6038

E/AndroidRuntime( 6038): java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

E/AndroidRuntime( 6038):    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)

E/AndroidRuntime( 6038):    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)

E/AndroidRuntime( 6038):    at javafx.event.Event.fireEvent(Event.java:198)

E/AndroidRuntime( 6038):    at javafx.scene.Node.fireEvent(Node.java:8411)

E/AndroidRuntime( 6038):    at javafx.scene.control.Button.fire(Button.java:185)

E/AndroidRuntime( 6038):    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)

E/AndroidRuntime( 6038):    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)

E/AndroidRuntime( 6038):    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)

E/AndroidRuntime( 6038):    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)

E/AndroidRuntime( 6038):    at javafx.event.Event.fireEvent(Event.java:198)

E/AndroidRuntime( 6038):    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)

E/AndroidRuntime( 6038):    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)

E/AndroidRuntime( 6038):    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)

E/AndroidRuntime( 6038):    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)

E/AndroidRuntime( 6038):    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:352)

E/AndroidRuntime( 6038):    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275)

E/AndroidRuntime( 6038):    at java.security.AccessController.doPrivileged(AccessController.java:52)

E/AndroidRuntime( 6038):    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$336(GlassViewEventHandler.java:388)

E/AndroidRuntime( 6038):    at com.sun.javafx.tk.quantum.GlassViewEventHandler.access$lambda$1(GlassViewEventHandler.java)

E/AndroidRuntime( 6038):    at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$4.get(Unknown Source)

E/AndroidRuntime( 6038):    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)

E/AndroidRuntime( 6038):    at com.sun.javafx.tk.quantum.GlassViewE

Вот файл build.gradle, и да, я использую шрифт Verdana. Но шрифт проходит нормально, судя по тому, что я вижу на своем устройстве Android.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.javafxports:jfxmobile-plugin:1.0.7'
    }
}

apply plugin: 'org.javafxports.jfxmobile'

repositories {
    jcenter()
    maven {
        url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
    }
}

mainClassName = 'com.SundaeThePugApp.SundaeThePugFX'

dependencies {
    compile 'com.gluonhq:charm:2.1.0'

    androidRuntime 'com.gluonhq:charm-android:2.1.0'
    iosRuntime 'com.gluonhq:charm-ios:2.1.0'
    desktopRuntime 'com.gluonhq:charm-desktop:2.1.0'
}

jfxmobile {
    android {
        manifest = 'src/android/AndroidManifest.xml'
        androidSdk = 'C:/Users/Zermatt/AppData/Local/Android/android-sdk/'
    }
}

Изменить

Найдена причина Fatal Exception. Похоже, Android не нравится следующий блок кода:

URL resource= getClass().getClassLoader().getResource("Music/ThemeMusic.mp3");
        themeSong = new MediaPlayer(new Media(resource.toString()));
        themeSong.setOnEndOfMedia(new Runnable()
        {   public void run()
            {   themeSong.seek(Duration.ZERO);
            }
        });
        themeSong.play();

И этот блок кода выдает сообщение об ошибке в Android:

googleMapEngine.load(getClass().getResource("/googleLondonMap.html").toExternalForm());

Веб-страница недоступна: не удалось загрузить веб-страницу jar:file:/data/app/com.SundaeThePugApp - 1/base .apk!/googleLondonMap.html, поскольку:

сеть::ERR_UNKNOWN_URL_SCHEME

так что я могу сделать сейчас, чтобы исправить это?

РЕДАКТИРОВАТЬ ПОВТОРНО

Экспериментируя с решением Jose и опираясь на него, я нашел способ заставить работать JavaScript в Html, хотя это и некрасиво. По сути, предоставленный им код я поместил в метод (называемый createAndroidURLScheme) и вернул строку. Вот код, и да, он отлично работает в JavaFX, но не в веб-просмотре Android снова:

String url = createAndroidURLScheme("/googleTestMap.html");
//System.out.println(url);
googleMapEngine.loadContent(url, "text/html");
googleMapEngine.setJavaScriptEnabled(true);
                googleMapEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>()
                {   public void changed(final ObservableValue<? extends Worker.State> observableValue, final State oldState, final State newState)
                    {   if (newState == State.SUCCEEDED)
                        {   googleMapEngine.executeScript(
                                "var latlng = new google.maps.LatLng(59.438722, 24.745278);" +
                                "var myOptions = {" + 
                                "zoom: 15," +
                                "center: latlng," +
                                "mapTypeId: google.maps.MapTypeId.ROADMAP," +
                                "mapTypeControl: false," +
                                "navigationControl: false," +
                                "streetViewControl: false," +
                                "backgroundColor: '#666970'," +
                                "disableDefaultUI: true" +
                                "};" +
                                "" +
                                "var map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);");
                        }
                    }
                });

Теперь через logcat я получаю это новое фатальное исключение Android:

    I/System.out(  809): [JVDBG] Error firing event

W/System.err(  809): java.lang.ClassNotFoundException: com.sun.webkit.NativeWebView

W/System.err(  809):    at java.lang.Class.classForName(Native Method)

W/System.err(  809):    at java.lang.Class.forName(Class.java:309)

W/System.err(  809):    at com.oracle.dalvik.InternalWebView._fireLoadEvent(InternalWebView.java:347)

W/System.err(  809):    at com.oracle.dalvik.InternalWebView.fireLoadEvent(InternalWebView.java:140)

W/System.err(  809):    at com.oracle.dalvik.InternalWebView.access$400(InternalWebView.java:43)

W/System.err(  809):    at com.oracle.dalvik.InternalWebView$MyJavaScriptInterface.processHTML(InternalWebView.java:363)

W/System.err(  809):    at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)

W/System.err(  809):    at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:39)

W/System.err(  809):    at android.os.Handler.dispatchMessage(Handler.java:102)

W/System.err(  809):    at android.os.Looper.loop(Looper.java:145)

W/System.err(  809):    at android.os.HandlerThread.run(HandlerThread.java:61)

W/System.err(  809): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.sun.webkit.NativeWebView" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

W/System.err(  809):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

W/System.err(  809):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)

W/System.err(  809):    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)

W/System.err(  809):    ... 11 more

W/System.err(  809):    Suppressed: java.lang.ClassNotFoundException: com.sun.webkit.NativeWebView

W/System.err(  809):        at java.lang.Class.classForName(Native Method)

W/System.err(  809):        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)

W/System.err(  809):        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)

W/System.err(  809):        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)

W/System.err(  809):        ... 12 more

W/System.err(  809):    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

E/AndroidRuntime(  809): FATAL EXCEPTION: JavaFX Application Thread

E/AndroidRuntime(  809): Process: com.SundaeThePugApp, PID: 809

E/AndroidRuntime(  809): java.lang.UnsupportedOperationException: Not supported yet.

E/AndroidRuntime(  809):    at com.sun.webkit.WebPage.executeScript(WebPage.java:153)

E/AndroidRuntime(  809):    at javafx.scene.web.WebEngine.executeScript(WebEngine.java:860)

E/AndroidRuntime(  809):    at com.SundaeThePugApp.SundaeThePugController$1.changed(SundaeThePugController.java:202)

E/AndroidRuntime(  809):    at com.SundaeThePugApp.SundaeThePugController$1.changed(SundaeThePugController.java:200)

E/AndroidRuntime(  809):    at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)

E/AndroidRuntime(  809):    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)

E/AndroidRuntime(  809):    at javafx.beans.property.ReadOnlyObjectWrapper$ReadOnlyPropertyImpl.fireValueChangedEvent(ReadOnlyObjectWrapper.java:176)

E/AndroidRuntime(  809):    at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:142)

E/AndroidRuntime(  809):    at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)

E/AndroidRuntime(  809):    at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)

E/AndroidRuntime(  809):    at javafx.scene.web.WebEngine$LoadWorker.updateState(WebEngine.java:1023)

E/AndroidRuntime(  809):    at javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1134)

E/AndroidRuntime(  809):    at javafx.scene.web.WebEngine$LoadWorker.access$1000(WebEngine.java:1016)

E/AndroidRuntime(  809):    at javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:1003)

E/AndroidRuntime(  809):    at com.sun.webkit.WebPage.fireLoadEvent(WebPage.java:251)

E/AndroidRuntime(  809):    at com.sun.webkit.NativeWebView$1.run(NativeWebView.java:100)

E/AndroidRuntime(  809):    at com.sun.javafx.application.PlatformImpl.lambda$null$155(PlatformImpl.java:295)

E/AndroidRuntime(  809):    at com.sun.javafx.application.PlatformImpl.access$lambda$18(PlatformImpl.java)

E/AndroidRuntime(  809):    at com.sun.javafx.application.PlatformImpl$$Lambda$19.run(Unknown Source)

E/AndroidRuntime(  809):    at java.security.AccessController.doPrivileged(AccessController.java:52)

E/AndroidRuntime(  809):    at com.sun.javafx.application.PlatformImpl.lambda$runLater$156(PlatformImpl.java:294)

E/AndroidRuntime(  809):    at com.sun.javafx.application.PlatformImpl.access$lambda$5(PlatformImpl.java)

E/AndroidRuntime(  809):    at com.sun.javafx.application.PlatformImpl$$Lambda$6.run(Unknown Source)

E/AndroidRuntime(  809):    at com.sun.glass.ui.monocle.RunnableProcessor.runLoop(RunnableProcessor.java:92)

E/AndroidRuntime(  809):    at com.sun.glass.ui.monocle.RunnableProcessor.run(RunnableProcessor.java:51)

E/AndroidRuntime(  809):    at java.lang.Thread.run(Thread.java:818)

V/ApplicationPolicy( 3468): isApplicationStateBlocked userId 0 pkgname com.SundaeThePugApp

V/ApplicationPolicy( 3468): isApplicationStateBlocked userId 0 pkgname com.SundaeThePugApp

V/ApplicationPolicy( 3468): isApplicationStateBlocked userId 0 pkgname com.sec.android.app.launcher

Что я могу сделать сейчас, чтобы облегчить это и сделать Android Webview счастливым?


person zermatt    schedule 06.04.2016    source источник
comment
С подключенным устройством вы можете запустить командную строку adb logcat -v threadtime и найти исключение? Опубликовать соответствующую часть   -  person José Pereda    schedule 06.04.2016
comment
Привет Хосе, Спасибо за попытку помочь мне. Я нашел файл adb.exe в папке: c:\Users\Zermatt\AppData\Local\Android\android-sdk\platform-tools, поэтому я подключил свое устройство Android через usb-кабель к компьютеру, а затем выполнил команду, которую вы предложили в экран командной строки в указанной выше папке с адресом. Когда я запустил команду, все, что я получил, это: демон не работает. запустив его сейчас на порту 5037, в следующей строке говорится, что демон запущен успешно, в следующей строке - ожидание устройства - теперь, через 15 минут, похоже, больше ничего не происходит. Должно ли это занять много времени? Извините, вы не знакомы с этим инструментом!   -  person zermatt    schedule 07.04.2016
comment
Извините, Хосе, новичок в этом деле после дальнейшего чтения. Я понял, что мне нужно включить параметры разработчика и активировать отладку по USB. Теперь я создал текстовый файл, используя следующую команду: adb logcat -d › logcat.txt. Поскольку подробное описание было таким длинным, я не мог увидеть все это через окно командной строки.   -  person zermatt    schedule 07.04.2016
comment
Теперь, когда у нас есть след исключения, не могли бы вы поделиться полным выводом (через gist или pastebin)?   -  person José Pereda    schedule 07.04.2016
comment
Я просмотрел, выполнив поиск слов в текстовом файле, и нет строки с надписью Caused By, чтобы указать причину, по которой я получаю InvocationTargetException. Это исключение никогда не возникает ни на каком другом этапе тестирования?   -  person zermatt    schedule 07.04.2016
comment
не могу сказать не посмотрев   -  person José Pereda    schedule 07.04.2016
comment
Пытаясь настроить учетную запись pastebin, пока не удалось ее активировать.   -  person zermatt    schedule 07.04.2016
comment
Хосе, под учетной записью Zermatt на Pastebin вы найдете общедоступные пасты от Logcat 1 до 5, охватывающие трассировку исключений, доступных для вашего прочтения.   -  person zermatt    schedule 07.04.2016
comment
Я не могу войти, можете сделать публичную ссылку?   -  person José Pereda    schedule 07.04.2016
comment
Я дважды проверил, и он говорит, что все пять вставок являются общедоступными вставками, и все могут видеть эти вставки, и у меня уже было от 37 до 50 обращений в соответствии с pastebin. Я так понимаю, другие это видят?   -  person zermatt    schedule 07.04.2016
comment
Хорошо понял. Вы видели это исключение в журнале1 java.lang.Exception: Font name not found.? Не могли бы вы опубликовать здесь свой файл build.gradle?   -  person José Pereda    schedule 07.04.2016
comment
Вы можете обновить плагин до версии 1.0.8. Можно ли запустить без шрифта? В противном случае решением избежать исключения будет добавление ttf к ресурсам и его загрузка.   -  person José Pereda    schedule 07.04.2016
comment
Любые мысли Хосе о том, что может быть причиной Fatal Exception? Я попытался поместить try/catch для исключения invocationtargetexception в своем коде, где возникает Fatal Exception, но Netbeans говорит, что это исключение никогда не выдается, и мне не нравится, что я пытаюсь его туда поместить. Я добавил шрифт Verdana в свой файл ресурсов и воссоздал apk, но исключение java.lang,Exception по-прежнему возникает при создании нового файла logcat. Это фатальное исключение не дает мне никакого намека на то, что может быть причиной проблемы, заставляющей меня чувствовать себя в тупике!   -  person zermatt    schedule 08.04.2016
comment
Проверьте этот вопрос, возможно, вы пропустили аннотацию @FXML?. Если вы обновились до 1.0.8 и загрузили шрифт, не могли бы вы обновить файл logcat (используя logcat -v threadtime)?   -  person José Pereda    schedule 08.04.2016
comment
Нет, это не моя проблема в этом сценарии, если бы это было так, я бы увидел это при компиляции проекта в Netbeans, прежде чем перемещать все в свой проект gradle. По крайней мере, в этом случае invocationtargetexception перечислил в журнале оператор, вызванный оператором. Мой не показывает это в логарифме, который оставляет меня вслепую относительно того, в чем проблема?   -  person zermatt    schedule 08.04.2016
comment
Я тоже слепой, так как не вижу проекта. Можете ли вы поделиться минимальной частью этого, чтобы я мог попытаться воспроизвести ошибку?   -  person José Pereda    schedule 08.04.2016
comment
Привет, Хосе. Можете ли вы прояснить, как избежать того, чтобы Android говорил net :: ERR_UNKNOWN_URL_SCHEME, поскольку это самая важная часть, которую мне нужно исправить?   -  person zermatt    schedule 11.04.2016


Ответы (1)


Судя по последней предоставленной информации, у вас есть две известные проблемы:

Медиа

Если вы взглянете на это, Media — это еще не поддерживается, поэтому вам нужно его удалить.

Ошибка схемы URL

Если вы посмотрите на URL в сообщении об ошибке, jar:file:/data/.../base.apk!/googleLondonMap.html, то net::ERR_UNKNOWN_URL_SCHEME означает, что jar:file не является известным протоколом на Android.

Причина этого в том, что загрузка html-файла из jar-файла не поддерживается Android SDK.

В любом случае, ресурс доступен, поэтому в качестве обходного пути вы можете просто загрузить html-файл в строку и предоставить его WebEngine, используя вместо этого метод loadContent.

Что-то вроде этого должно работать:

StringWriter writer = new StringWriter();
BufferedReader reader = null;
try {
    reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/googleLondonMap.html")));
    String line = null;
    while ((line = reader.readLine()) != null) {
        writer.append(line);
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (reader != null) {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
engine.loadContent(writer.toString());
person José Pereda    schedule 11.04.2016
comment
Прежде всего, большое спасибо за вашу помощь, Хосе. Мне понравилось ваше объяснение выше при загрузке html-файла из файла jar, который не поддерживается Android SDK. Раньше я не знал об этом ограничении. Я не знаю, может ли мой перенос продолжаться сейчас из-за этого ограничения? Хотя он избавился от ошибки схемы URL. Я чувствую, что немного приблизился, но теперь я получил пустой белый экран там, где должна была быть карта, и ее позиционирование не соответствует графическому интерфейсу, разработанному в Scene Builder. Поскольку это мой первый порт JavaFX для Android, я многому научился в этом процессе. - person zermatt; 11.04.2016
comment
Попробуйте загрузить более простую html-страницу, проверив, что она загружается полностью (минимально возможный контент). Вы можете вывести на консоль (System.out.println()), а затем проверить с помощью adb logcat, что вы туда попали. Если это сработает, начните добавлять контент и узнайте о возможных проблемах. Также убедитесь, что он работает сначала на рабочем столе. - person José Pereda; 11.04.2016
comment
Подход не работает, когда я пытаюсь запустить его на рабочем столе с помощью Netbeans - Задача --> Выполнить --> Выполнить. Приложение запускается, но карты Google вообще не отображаются. Все, что я получаю, это серый фон без ошибок. Пока я не попытаюсь выполнить одну из других функций в файле html и не получу следующее: Вызвано: netscape.javascript.JSException: TypeError: undefined is not a function - person zermatt; 11.04.2016
comment
Если это не работает на рабочем столе, это не будет работать на мобильных устройствах. Поэтому попробуйте сначала исправить это на рабочем столе и проверьте, почему он не загружает html-контент. - person José Pereda; 11.04.2016
comment
ОК, Хосе, я думаю, что проблема с этим подходом заключается в том, что да, он подберет то, что написано между тегами ‹body›‹/body› html-документа, например. Привет, мир. Однако при вызове функции загрузки javascript она не работает с использованием engine.loadContent(writer.toString()). Используя System.out.println(), я вижу, что все содержимое файла находится там, что обнадеживает. Мои HTML-документы очень похожи на документы на веб-сайте FXExperience для примера карт: ссылка - person zermatt; 12.04.2016
comment
Привет, Хосе, я опубликовал свои выводы по другому вопросу, который я написал в Stack Overflow. Это ссылка: ссылка[ссылка ]. Я надеюсь, вы не возражаете, если я спрошу, можете ли вы переслать его соответствующим людям, чтобы они посмотрели с вашими контактами. - person zermatt; 18.04.2016