(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。minimizeclose按钮是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>