簡體   English   中英

父JFrame失去焦點后在TextField中鍵入時出現JavaFX / Swing線程問題

[英]JavaFX/Swing threading issues when typing in TextField after parent JFrame loses focus

我有一個結合了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 9JDK 10 搶先體驗版中也無法復制。 已經報告了此問題,您可以在這里跟蹤: https : //bugs.openjdk.java.net/browse/JDK-8195739謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM