0

Gluonプラグインをインストールした後、Intellij IdeaにGluon JavafXプロジェクトがあり、JavaFXのWebkitブラウザーにいくつかの静的HTMLファイルをロードしています。

ここで、JavaFX アプリケーションを直接起動すると、HTML が読み込まれていることがわかりますが、APK を作成すると、HTML が読み込まれません。と の 2 つのパスを試しましたが、両方の APKhtml/index.htmlindex.htmlアプリに何も表示されず、黒い画面が読み込まれました。

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 を開くと黒い画面が表示されるのはなぜですか。bodyofに「Hello world」を入れただけですが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)
4

1 に答える 1

0

使用する場合

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);
}
于 2016-02-12T12:36:57.260 に答える