Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让JavaFXWebView从jar文件加载资源_Java_Javafx_Webview_Osgi_Cytoscape - Fatal编程技术网

如何让JavaFXWebView从jar文件加载资源

如何让JavaFXWebView从jar文件加载资源,java,javafx,webview,osgi,cytoscape,Java,Javafx,Webview,Osgi,Cytoscape,我正在尝试使用javafx.scene.web.WebView从jar文件加载资源,但它不想这样做,也不会产生任何有意义的错误 jar文件是一个OSGi包,特别是一个应用程序(插件)包 这是我的代码:(如果我把https://google.com作为url) webView.getEngine().getLoadWorker().exceptionProperty().addListener(新的ChangeListener()){ @凌驾 public void changed(observe

我正在尝试使用
javafx.scene.web.WebView
从jar文件加载资源,但它不想这样做,也不会产生任何有意义的错误

jar文件是一个OSGi包,特别是一个应用程序(插件)包

这是我的代码:(如果我把
https://google.com
作为url)

webView.getEngine().getLoadWorker().exceptionProperty().addListener(新的ChangeListener()){
@凌驾
public void changed(observevalue@james_d是对的——问题是您从getResource获取的URL是一个OSGi包:uri,WebView不知道如何读取。您可以查看我们的CyPlot代码(),看看我们是如何解决这一问题的,即如何读取html和Javascript并将其交给Cytoscape的web浏览器

--scooter

@james_d是对的——问题是您从getResource获取的URL是一个OSGi包:uri,WebView不知道如何读取。您可以查看我们的CyPlot代码(),了解我们如何解决这一问题,以html和Javascript读取,并将其交给Cytoscape的web浏览器


--scooter

您能显示完整的堆栈跟踪(
t1.printStackTrace()
)吗?也许还可以记录该url?这很奇怪。注意,既然您已经演示了可以直接读取url的内容,那么您可以通过
String content=new String(getClass().getResourceAsStream(“/foo.html”).readAllBytes()找到解决方法;
然后
webView.getEngine().loadContent(content);
(但不知道html中的相对URL会发生什么情况…)@james_d,是的,但我希望下一步做foo.css。我想我可以将所有内容打包到一个HTML中作为解决办法
WebEngine
的javadocs声明URL处理是通过
java.net
包进行的,该包确实有用于自定义内容处理程序的API(但我已经看了15年了,我不记得了)。我知道有些Cytoscape插件使用JavaFX,如果我没记错的话,
WebView
是这样做的原因之一,因此可能有人解决了这个问题。我会给Cytoscape论坛发一条消息,看看是否有人能帮上忙。你能显示完整的堆栈跟踪(
t1.printStackTrace()
)?可能还记录该url?这很奇怪。请注意,既然您已经演示了可以直接读取url的内容,那么您可以通过
String content=new String(getClass().getResourceAsStream(“/foo.html”).readAllBytes();
然后
webView.getEngine().loadContent(content);
(虽然不知道html中的相对URL会发生什么情况…@james_d,是的,但我希望下一步做foo.css。我想我可以将所有内容打包到一个html中作为解决办法
WebEngine
的javadocs声明URL处理是通过
java.net
包进行的,该包中有用于自定义内容处理程序的API(但我已经15年没有看到这个了,我不记得了)。我知道有一些Cytoscape插件使用JavaFX,如果我没记错的话,
WebView
是这样做的原因之一,所以可能有人解决了这个问题。我会给Cytoscape论坛发一条消息,看看是否有人能帮上忙。这是正确的链接吗?看起来项目几乎是空的。这是正确的链接吗?这是错误的吗像这样的项目几乎是空的。
webView.getEngine().getLoadWorker().exceptionProperty().addListener(new ChangeListener<Throwable>() {
    @Override
    public void changed(ObservableValue<? extends Throwable> ov, Throwable t, Throwable t1) {
        System.out.println("Received exception: "+t1.getMessage() + " " + t1.getClass().getName());
        t1.printStackTrace();
    }
});

webView.getEngine().getLoadWorker().messageProperty().addListener(new ChangeListener<String>() {
    @Override
    public void changed(ObservableValue<? extends String> ov, String t, String t1) {
        System.out.println("message:" + t1);
    }
});

String url = getClass().getResource("/foo.html").toExternalForm();
webView.getEngine().load(url);
System.out.println("contents:" + new String(getClass().getResourceAsStream("/foo.html").readAllBytes()));   

message:Loading bundle://202.0:1/foo.html                                                                                                                                        
contents:<p>hello, webview</p>
message:Loading failed
Received exception: Unknown error java.lang.Throwable
    at javafx.web/javafx.scene.web.WebEngine$LoadWorker.describeError(WebEngine.java:1431)
    at javafx.web/javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1370)
    at javafx.web/javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:1231)
    at javafx.web/com.sun.webkit.WebPage.fireLoadEvent(WebPage.java:2514)
    at javafx.web/com.sun.webkit.WebPage.fwkFireLoadEvent(WebPage.java:2359)
    at javafx.web/com.sun.webkit.Timer.twkFireTimerEvent(Native Method)
    at javafx.web/com.sun.webkit.Timer.fireTimerEvent(Timer.java:83)
    at javafx.web/com.sun.webkit.Timer.notifyTick(Timer.java:64)
    at javafx.web/javafx.scene.web.WebEngine$PulseTimer.lambda$static$0(WebEngine.java:1192)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)