JavaFX,Gluon:HTML文件未从APK中的Java代码加载
在安装了Glon插件之后,我在Intellij Idea上有一个Glon JavafX项目,我正在JavafX的Webkit浏览器中加载一些静态HTML文件 现在,当我直接启动JavaFX应用程序时,我可以看到加载的HTML,但是当我创建APK时,我看不到加载的HTML。我尝试了两种路径,即JavaFX,Gluon:HTML文件未从APK中的Java代码加载,java,android,javafx,gluon,Java,Android,Javafx,Gluon,在安装了Glon插件之后,我在Intellij Idea上有一个Glon JavafX项目,我正在JavafX的Webkit浏览器中加载一些静态HTML文件 现在,当我直接启动JavaFX应用程序时,我可以看到加载的HTML,但是当我创建APK时,我看不到加载的HTML。我尝试了两种路径,即html/index.html和index.html,但对于这两种路径,APK都没有在应用程序中显示任何内容,只是加载了一个黑屏 根据前面关于Gluon的问题,我已经移动了resources目录中的静态内容。
html/index.html
和index.html
,但对于这两种路径,APK都没有在应用程序中显示任何内容,只是加载了一个黑屏
根据前面关于Gluon的问题,我已经移动了resources目录中的静态内容。这大大增加了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时,我只看到一个黑屏。我只是在index.html
的body
中添加了“Hello world”,即使没有显示。任何帮助都很好。多谢各位
更新
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)
:QuantumRenderer:关闭
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(本机方法)
02-12:49:24.540 13109 13132 W System.err:at javafxports.android.DalvikLauncher$1.run(DalvikLauncher.java:188)
02-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:原因:java.lang.RuntimeException:应用程序启动方法中的异常
02-12 12:49:24.540 13109 13132 W System.err:在com.sun.javafx.application.launchempl.launcheapplication1(launchempl.java:917)
02-12:49:24.540 13109 13132 W System.err:在com.sun.javafx.application.launchempl.lambda$launchApplication$137(launchempl.java:182)
02-12 12:49:24.540 13109 13132 W System.err:在com.sun.javafx.application.launchempl.access$lambda$1(launchempl.java)
02-12 12:49:24.540 13109 13132 W System.err:位于com.sun.javafx.application.launchempl$$Lambda$2.run(未知源)
02-12 12:49:24.540 13109 13132 W系统错误:。。。还有一个
02-12 12:49:24.540 13109 13132 W System.err:原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String java.net.URL.toExternalForm()”
02-12 12:49:24.5413109 13132 W System.err:at com.rewetest.MyBrowser.(MyBrowser.java:69)
02-12:49:24.5413109 13132 W System.err:at com.rewetest.Main.start(Main.java:30)
02-12 12:49:24.5413109 13132 W System.err:在com.sun.javafx.application.launchempl.lambda$launchApplication1$144(launchempl.java:863)
02-12 12:49:24.5413109 13132 W System.err:在com.sun.javafx.application.launchempl.access$lambda$8(launchempl.java)
02-12 12:49:24.541 13109 13132 W System.err:位于com.sun.javafx.application.launchempl$$Lambda$9.run(未知源)
02-12 12:49:24.5413109 13132 W System.err:在com.sun.javafx.application.PlatformImpl.lambda$runAndWait$157(PlatformImpl.java:326)
如果您使用
webEngine.load(getClass().getResource("index.html").toExternalForm());
您需要将资源放在与该类相同的包中:
src/main/resources/com/<your package>
这将解决NPE问题
我没有在您的代码中看到它,但我认为您正在将WebView
添加到场景中:
public MyBrowser() {
...
getChildren().add(webView);
}
你在桌面上试过了吗?如果它不能在桌面上工作,那是因为一个已知的bug。@JoséPereda:如果我只有一个JavaFX项目,没有Gluon,那么它就可以正常工作。现在,当我将项目作为应用程序加载时,我只得到一个错误,没有指定Android SDK。尽管我已经在jfxMobiel{android{//here}}中指定了@JoséPereda:我可以为您提供Main和MyBrowser的Java文件。你们能试着用你们自己的html,看看什么路径有效吗?你们能不能在桌面上运行它?为了在Android上运行,首先它也应该在桌面上运行。只需选择Gradle选项卡上的
运行
任务,看看是否有效。如果没有,请先解决问题。我可以在桌面上运行。。没问题。如果我把它放在src/java/resources/com/package name中,就像前面你说的,你看不到java文件,那么APK不会把它取出来。我必须把它放在src/main/resources中,由APK接收。我有你在代码中提到的构造函数,在这方面没有问题。
public MyBrowser() {
...
getChildren().add(webView);
}