(JavaFXWebEngine)JavaScript到Java调用的工作不一致
你好 我的应用程序的自定义最小化和关闭按钮工作不一致。我想在推进这个项目并使其更加复杂之前解决这个问题(JavaFXWebEngine)JavaScript到Java调用的工作不一致,javascript,java,jsp,javafx,jsobject,Javascript,Java,Jsp,Javafx,Jsobject,你好 我的应用程序的自定义最小化和关闭按钮工作不一致。我想在推进这个项目并使其更加复杂之前解决这个问题 背景 该应用程序是一个未修饰的JavaFX阶段,它包含一个WebView,加载由嵌入式Tomcat服务器托管的JSP。minimize和close按钮是JSP中的HTML,并且具有onclick侦听器,这些侦听器通过JavaScript到Java接口类AppHandle和委托类AppUtility调用Java方法来最小化和关闭应用程序 问题 按钮工作,但工作不一致。此外,当按钮随机失效时,
背景 该应用程序是一个未修饰的JavaFX阶段,它包含一个
WebView
,加载由嵌入式Tomcat服务器托管的JSP。minimize和close按钮是JSP中的HTML,并且具有onclick
侦听器,这些侦听器通过JavaScript到Java接口类AppHandle
和委托类AppUtility
调用Java方法来最小化和关闭应用程序
问题 按钮工作,但工作不一致。此外,当按钮随机失效时,它们一起失效 例如
- 启动应用程序时,按钮不起作用
- 启动应用程序,按钮工作。最小化应用程序,最大化应用程序-现在按钮不起作用李>
- 启动应用程序,按钮工作。最小化和最大化应用程序一次,按钮仍然有效。再做一两次——现在按钮不起作用了
- 等等
代码 JavaFX组件
Stage
|
\-- StackPane
|
\-- Browser (contains the WebView/WebEngine)
Browser
类扩展了Region
并包含WebView
及其WebEngine
。这是将AppHandle
类绑定到JSP中的“app
”标签的地方。公共浏览器(字符串页,最终应用工具){
setFontSmoothingType(FontSmoothingType.GRAY);
browser.setContextMenuEnabled(false);
webEngine.getLoadWorker().stateProperty()
.addListener(
新的ChangeListener(){
@凌驾
公共虚空改变了(observeValueBah,我解决了它。让这成为我更好地寻找问题的一课
使我明白了这个问题
我正在JSObject
中本地创建AppHandle
。我想在某个时候,本地AppHandle
会被取消引用,随之产生我的JSP-to-Java连接
现在,我在AppClient
中创建AppHandle
,并将其传递到Browser
中。这样,应用程序将保留对句柄的引用。Browser
构造函数更改为以下内容:
公共浏览器(字符串页,AppHandle){
setFontSmoothingType(FontSmoothingType.GRAY);
browser.setContextMenuEnabled(false);
webEngine.getLoadWorker().stateProperty()
.addListener(
新的ChangeListener(){
@凌驾
公共虚空改变了(observeValueBah,我解决了它。让这成为我更好地寻找问题的一课
使我明白了这个问题
我正在JSObject
中本地创建AppHandle
。我想在某个时候,本地AppHandle
会被取消引用,随之产生我的JSP-to-Java连接
现在,我在AppClient
中创建AppHandle
,并将其传递到Browser
中。这样,应用程序将保留对句柄的引用。Browser
构造函数更改为以下内容:
公共浏览器(字符串页,AppHandle){
setFontSmoothingType(FontSmoothingType.GRAY);
browser.setContextMenuEnabled(false);
webEngine.getLoadWorker().stateProperty()
.addListener(
新的ChangeListener(){
@凌驾
更改公众假期(非常感谢。这也解决了我的问题。我想知道当匿名声明时是否会收集垃圾或其他东西。讨厌的事情,在本地创建它是由官方文件提出的。非常感谢。这也解决了我的问题。我想知道当匿名声明时是否会收集垃圾或其他东西。讨厌的事情,cr官方文件建议在当地食用。
<div class="container-app">
<div class="text-title">myApp</div>
<div class="icon utility minimize" onclick="app.hide()">
<i class="fa fa-window-minimize" aria-hidden="true"></i>
</div>
<div class="icon utility close" onclick="app.exit()">
<i class="fa fa-times" aria-hidden="true"></i>
</div>
</div>