这不是特定领域关键事件的问题。我使用keyevents/keylisteners和jbutton作为示例。我所希望的就是能够在junit测试中方便地激发监听器。
我试图在单元测试中触发一个关键侦听器,但由于某些原因,该侦听器没有被触发。
public class Example {
public static void main(String[] args) {
AtomicBoolean keyReleasedRan = new AtomicBoolean(false);
JButton button = new JButton();
button.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
keyReleasedRan.set(true);
}
});
int modifiers = 100; //Something, we don't care
int keyCode = KeyEvent.VK_A; //something realistic
KeyEvent event = new KeyEvent(button, KeyEvent.KEY_RELEASED, System.currentTimeMillis() + 200,
modifiers, keyCode, 'a');
button.dispatchEvent(event);
System.out.println("KEY RELEASED RAN: " + keyReleasedRan.get());
}
}
我在事件构造函数中尝试了多个参数,以防它发挥作用,但侦听器始终不会被触发。
唯一可行但我真的不想遵循的方法是迭代 KeyListener
(s) 打电话 keyReleased()
方法,用于每个侦听器。
知道我做错了什么吗?
我尝试了另一个组件而不是jbutton,但结果相同。
1条答案
按热度按时间wsewodh21#
正如评论所说,如果您将它附加到jframe,它就会工作。
在单元测试中使用它时,还需要自动关闭jframe。所以我加了一句
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
及frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
.