我正在编写一个程序,其中按F4 将连续按键盘上的某个键,直到您按下另一个键(F2)
public ViewPotion() {
int i = 0;
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_F4) {
System.out.println("Iniciando AutoPotion");
i = 1;
new Thread() {
@Override
public void run() {
try {
while (i > 0) {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_O);
}
} catch (AWTException e) {
e.printStackTrace();
}
}
}.start();
}
if (event.getKeyCode() == KeyEvent.VK_F2) {
System.out.println("Parando AutoPotion");
i = 0;
}
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
}
}
但是我得到了错误:
我在封闭范围内定义的局部变量必须是最终的或实际上是最终的
答案 0 :(得分:1)
您在getAttribute()
块之外定义了i
。这里的问题是keyPressed
方法不会在之后立即调用,因此keyPressed
必须为i
,这样您才不会意外地在两个线程之间同时修改变量。>
这里的一种解决方案是使final
成为全局变量(方法之外)。这样,就可以从多个线程进行访问,并且在i
完成时也不会超出范围。
您还可以通过使用布尔值来显着清理代码
ViewPotion