在父 JFrame 失去焦点后在 TextField 中键入时出现 JavaFX/Swing 线程问题



我有一个组合的Swing/JavaFX应用程序,使用JDesktopPane和JInternalFrame for MDI和JFXPanel在内部框架中嵌入JavaFX字段。这一直工作正常,直到Java 8u161。通过更新,当用户尝试在文本字段中键入内容时,会抛出许多未捕获的异常,尤其是在父 JFrame 失去焦点之后。任何解决方法建议将不胜感激。

示例程序:

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
public class SwingFXTest {
  public static void main(String[] args) {
    SwingUtilities.invokeLater(() -> {
      new SwingFXTest().initAndShowGUI();
    });
  }
  private void initAndShowGUI() {
    JFrame frame = new JFrame("Test 8u161");
    JDesktopPane desktopPane = new JDesktopPane();
    JMenuBar menuBar = new JMenuBar();
    JMenu menu = new JMenu("Test Menu");
    menuBar.add(menu);
    JMenuItem menuItem = new JMenuItem("Test Item");
    menuItem.addActionListener(e -> {
      desktopPane.add(createInternalFrame());
    });
    menu.add(menuItem);
    frame.setJMenuBar(menuBar);
    frame.setContentPane(desktopPane);
    frame.setSize(600, 600);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
  private JInternalFrame createInternalFrame() {
    JInternalFrame internalFrame = new JInternalFrame();
    internalFrame.setVisible(true);
    internalFrame.setResizable(true);
    internalFrame.setSize(200, 200);
    final JFXPanel fxPanel = new JFXPanel();
    internalFrame.setContentPane(fxPanel);
    Platform.runLater(() -> initFX(fxPanel));
    return internalFrame;
  }
  private void initFX(JFXPanel fxPanel) {
    TextField field = new TextField();
    Group root = new Group(field);
    Scene scene = new Scene(root);
    fxPanel.setScene(scene);
  }
}   

要重现此问题,请执行以下操作:

选择测试菜单 ->测试项
单击文本字段
在应用程序窗口
外单击再次
单击文本字段开始打字

有时文本会加倍(即键入"test"会导致"testtest"(,最终我开始出现许多异常。此处的示例堆栈跟踪。

编辑:我正在运行Windows 10。

此问题在

尚未发布的 JDK 8 抢先体验版本 (8u172( 中不可重现。所以请等待相同。在 JDK 9 和 JDK 10 抢先体验版本中也不可重现。此问题已报告,您可以在此处跟踪:https://bugs.openjdk.java.net/browse/JDK-8195739谢谢

最新更新