基本的に数字パッドのキーを連打してそこにダミー データをすばやく入力することでプログラムのデモンストレーションを行っていたところ、時折、無効な入力が入力されることがあることがわかりました。ある種のスレッド化の問題のように思えますが、Swing イベントについての私の理解では、それらは基本的に同じスレッドから順次起動されるということです。私は明示的に独自のスレッドを作成していませんが、paintComponent(Graphics g)
. ほとんどのキー押下は、最終的repaint()
にスタックの深い部分をトリガーします。それが私の問題を引き起こしている可能性がありますか?なんで?もしそうなら、それを修正する方法はありますか?そうでない場合、他に何が考えられますか?
また、これを自動テストする方法を知っている人はいますか? 関連するイベント ハンドラーを以下に示します。
public void keyTyped(KeyEvent e)
{
if (e.getKeyChar() == myKeyChar)
runPrimaryFunction(); // Does some calculations and triggers a repaint
}
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == myKeyCode)
runPrimaryFunction();
}
/********* Another class listening to the same JFrame ********/
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_UP)
{
scrollUp();
repaint();
}
else if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
scrollDown();
repaint();
}
}