【发布时间】:2018-03-03 13:47:43
【问题描述】:
我检查了this SO question,但仍然找不到解决方案。
我正在尝试查看脱机 HTML 文件。该文件可以存储在Storage 或FileSystemStorage。但是,我不确定如何获取Storage 中文件的 URL,所以我使用了FileSystemStorage.getAppHomePath。我使用的代码如图所示:
BrowserComponent bc = new BrowserComponent();
String appPath = fs.getAppHomePath();
bc.setURL(appPath + "1.html");
HTML(以及未显示的支持文件)是通过以下方式从 Web 下载的:
Util.downloadUrlToFile("https://google.com", appPath + "1.html", false);
.cn1/ 文件夹确实包含 1.html,但该页面未加载。错误代码是
Received exception: File not found
java.lang.Throwable: File not found
at javafx.scene.web.WebEngine$LoadWorker.describeError(WebEngine.java:1463)
at javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1402)
at javafx.scene.web.WebEngine$LoadWorker.access$1200(WebEngine.java:1280)
at javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:1267)
at com.sun.webkit.WebPage.fireLoadEvent(WebPage.java:2499)
at com.sun.webkit.WebPage.fwkFireLoadEvent(WebPage.java:2343)
at com.sun.webkit.network.URLLoader.twkDidFail(Native Method)
at com.sun.webkit.network.URLLoader.notifyDidFail(URLLoader.java:883)
at com.sun.webkit.network.URLLoader.lambda$didFail$104(URLLoader.java:866)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:748)
另一种方法,使用
String html = Util.readToString(fs.openInputStream(appPath + "1.html"));
bc.setPage(html, appPath);
可以显示html但不加载支持文件,这是一个.js文件。将 .js 内容复制到 html 中的 <script> 标记中,可以正确显示所有内容。
我想问一下这种行为是否是由于我的代码中的任何错误造成的,我该如何解决这个问题?
【问题讨论】:
-
可能不相关,但我已经简要查看了代码,
CodenameOneImplementation#setBrowserURL包含这一行,看起来有点可疑: InputStream i = Display.getInstance().getResourceAsStream(getClass() , url.substring(6));模拟器可能使用另一种实现,因为在那里添加断点不会影响模拟器
标签: codenameone