当在8u161或8u162上运行Swing应用程序并且焦点在JTextField中并且切换到另一个应用程序(如Chrome)并返回到应用程序时,我的8核Windows 10 PC上的CPU使用率增长到15%(就好像整个核心是忙着处理事件).
只需运行应用程序并切换几次.如果单击选项卡式窗格中的选项卡,CPU使用率将按预期降至0.
public class Test {
public static void main(String... args) {
SwingUtilities.invokeLater(() -> {
JFrame f = new JFrame("Test");
JTabbedPane tp = new JTabbedPane();
tp.addTab("tab 1", new JTextField(20));
f.add(tp);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
}
Run Code Online (Sandbox Code Playgroud)
我试图查看事件队列以查看发生了什么,它看起来很像上次事件被反复处理
如果我将它添加到上面的程序中,我会得到很多java.awt.event.InvocationEvent [INVOCATION_DEFAULT,runnable = sun.awt.windows.WInputMethod ...
Toolkit.getDefaultToolkit().getSystemEventQueue().push(new EventQueue(){
@Override protected void dispatchEvent(AWTEvent event) {
System.out.println(event);
super.dispatchEvent(event);
}
});
Run Code Online (Sandbox Code Playgroud)
在8u151,8u152和9.0.4上正常工作
我有很多客户正在升级到161并且遇到了这个问题,所以对于解决方法的任何建议都非常感谢. 我向Oracle提交了一个错误
好像在8u172 b02上工作正常
小智 0
您的客户使用输入法吗?如果您不需要启用输入法,我建议您可以将其禁用。
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame("Test");
JTabbedPane tp = new JTabbedPane();
JTextField tf = new JTextField();
tf.enableInputMethods(false); // disable IM
tp.addTab("tab 1", tf);
f.add(tp);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3038 次 |
最近记录: |