2016-04-14 15 views
0

私はNetbeansとGradleを使ってJavaFXプロジェクトをAndroid APKファイル形式に移植しようとしていました。私が抱えている問題は特にAndroidのWebViewコンポーネントにありますか?私のアプリが致命的な例外で転倒することなく、AndroidのWebviewに静的なWebページを表示することができます。 JavaScriptを使用してJavaFX Webviewで動的Webページを作成すると、Androids Webviewはまったく対応していないようです。 JavaFXのでは本家のJavaFX WebviewとAndroidのWebviewとの互換性はありますか?

私がtrueにはJavaScriptを有効に設定します。

googleMapEngine.setJavaScriptEnabled(true); 

私は、AndroidのWebViewでいることを承知しているとして - JavaScriptはデフォルトではオフになって。 Androidで動作させることができません。さらに、Android WebviewはJavaFXコマンドの解決方法を知っていますか?

googleMapEngine.executeScript(String); 

原因私がしようとした場合、この:私はlogcatでエラーで終わる

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);"); 

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 
すべてのフィードバックが最も歓迎されるだろう

:)

+0

Java.lang.ClassNotFoundException:com.sun.webkit.NativeWebView これは、このクラスがプロジェクトに存在しないことを意味します。つまり、関連するjarをインポートする必要があります。残りの問題がわからないので、これが正しい軌道に乗るのを助けてくれることを願っています。 – XaolingBao

答えて

1

OKずっと後に試行錯誤私はJavaFXPortsが全体的に悪いとの結論に達しましたが、いくつかの注意点があります:

1)メディアとオーディオの機能は、致命的例外をスローするため、現在アプリでは使用できません。

2)Webviewはレンダリングに限ります javascriptのウェブサイトです。私が使用している場合、私は、説明します

googleMapEngine.load("http://fxexperience.com/"); 

パーフェクト、すべてが正常に動作して、ページが正しくレンダリングされます。

しかし、私はこれを行う場合:

googleMapEngine.setJavaScriptEnabled(true);  
googleMapEngine.load("https://www.openstreetmap.org/"); 

を私はNOマップを取得し、私は私のアプリで見ることができるすべてがそうでないのWebViewの残りの部分があり、オープンストリートマップのロゴとメニューボタンで白!また、JavaFXでJavaScriptを有効にすると、の効果がありません。をアンドロイドウェブビューに残すアンドロイドのデフォルト設定をfalseに設定してください。

私は可能なGoogleマップのURL最も単純大半を行う場合について:

googleMapEngine.setJavaScriptEnabled(true);  
googleMapEngine.load("https://www.google.com/maps/"); 

が、私は何もが、白い画面を取得していません!また、JavaFXでJavaScriptを有効にすると、の効果がありません。をアンドロイドウェブビューに残すアンドロイドのデフォルト設定をfalseに設定してください。

私はそのパスが正しく行われてローカルのhtmlファイル行う場合:

googleMapEngine.setJavaScriptEnabled(true); 
googleMapEngine.load(getClass().getClassLoader().getResource("googleLondonMap.html").toExternalForm()); 

を私は、AndroidのWebViewの中でネット:: ERR_UNKNOWN_URL_SCHEMEを受けます。

最後に、Androids Webviewのデフォルトのjavascript設定はfalseに設定されています。それはあなたのアンドロイドアプリで致命的な例外の原因となります

googleMapEngine.executeScript(foo()); 

:今まではJavaFXのステートメントを使用しようとする場合、これが意味しています。 Johan VosとCoがこれらのAndroid WebView移植の問題を克服して、JavaFXPortsの優れた作業についての今後のアップデートをすれば、それは甘いでしょう!

+0

報告していただきありがとうございます。私たちはAndroidで 'executeScript()'が失敗している理由を調べるために問題を提出しました。その間、WebViewやJavaScriptを必要としない代替手段として、この[post](http://gluonhq.com/announcing-gluon-maps/)をご覧ください。 –

+0

あなたが投稿した問題とリンクに関するご支援をいただき、ありがとうございます。私はこれを見ていきます。また、なぜ 'webEngine.setJavaScriptEnabled(true);'が動作していないか、またはAndroids webviewに望ましい効果があるのか​​という問題を提出しなければならないと思います。 – zermatt

関連する問題