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