Java 7问题-未将类型提前击键排入队列

Java 7问题-未将类型提前击键排入队列,java,swing,keystroke,type-ahead,Java,Swing,Keystroke,Type Ahead,我遇到了一个问题,当文本字段获得焦点时,击键会丢失,而不是排队处理。这在Java6中正常工作,但在Java7中不再正常工作 以下是场景: 用户打开一个焦点为文本字段的对话框 就在对话框出现之前,用户开始键入一些内容 一旦对话框启动且textfield具有焦点: Java 6:用户以前键入的任何内容都会显示在文本字段中 Java 7:文本字段中不显示任何内容 知道为什么会这样吗 使用下面的示例代码: 单击按钮时,加载另一个对话框需要4秒钟。在这段时间里,开始按键盘上的字母键。一旦出现第二个对话框,

我遇到了一个问题,当文本字段获得焦点时,击键会丢失,而不是排队处理。这在Java6中正常工作,但在Java7中不再正常工作

以下是场景:

用户打开一个焦点为文本字段的对话框 就在对话框出现之前,用户开始键入一些内容 一旦对话框启动且textfield具有焦点: Java 6:用户以前键入的任何内容都会显示在文本字段中 Java 7:文本字段中不显示任何内容 知道为什么会这样吗

使用下面的示例代码: 单击按钮时,加载另一个对话框需要4秒钟。在这段时间里,开始按键盘上的字母键。一旦出现第二个对话框,您将在文本字段中看到按键。这适用于Java6,但不适用于Java7

public class UITest{

public static void main(String[] args)
  {
    final UITest example = new UITest();
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run() {
            example.createMainDialog();
        }
    });
  }

  public void createMainDialog()
  {

    JFrame frame = new JFrame("Main Dialog");
    frame.setLayout(new FlowLayout());

    JButton button = new JButton("Click Me");
    button.addActionListener(new ActionListener() {         
        @Override
        public void actionPerformed(ActionEvent arg0) {
            createOtherDialog();
        }
    });
    frame.add(button);

    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }

  public void createOtherDialog()
  {

    //I know this is bad to do in the EDT, but just trying to simulate a busy EDT
    try {
        Thread.sleep(4000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }  

    JFrame frame = new JFrame("Other Dialog");
    frame.setLayout(new FlowLayout());

    JTextField field = new JTextField(25);
    frame.add(field);

    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);

     //Text field has focus
    field.requestFocus();
  }
}   

你能为我们创建一个小程序来重现你的问题吗,安?我刚刚发布了。你知道为什么会发生这种情况吗?我的第一个想法是对话框太长,无法显示。我的意思是要回答的第一个问题是,为什么用户有足够的时间在对话框变为可见之前键入内容?作为第一步,我将检查为什么会发生这种情况。当您尝试在SSCCE中进行仿真时,在对话框创建期间EDT中的一些繁重任务可能可以在单独的线程中完成。Swing应该足够轻量级,几乎可以立即显示对话框。