我一直在尝试自己学习更高级的java(我的类只覆盖文本文件)而且我对使用KeyListener感到困惑。我设法让它在另一个程序中工作,但我在这里找不到问题。控制台上没有错误显示。该程序使用机器人在文本文件中键入预定义的字符串。这是主要课程。
import java.awt.AWTException;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.SwingUtilities;
public class FileTyper implements KeyListener {
static Keyboard kb;
static Scanner infile;
static boolean on = false;
static Window window;
public static void main(String args[]) throws AWTException, FileNotFoundException{
init();
start();
}
private static void init() throws AWTException, FileNotFoundException{
window = new Window();
kb = new Keyboard();
kb.setSpeed(50);
infile = new Scanner(new File("C:/Users/Ali/Desktop/input.txt"));
}
private static void start(){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if(on && infile.hasNext()){
String temp = infile.nextLine();
kb.type(temp);
kb.type("\n");
}
}
});
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_F9:
System.out.println("CONSOLE: Starting");
on = true;
break;
case KeyEvent.VK_F10:
System.out.println("CONSOLE: Stopping");
on = false;
break;
}
}
@Override
public void keyTyped(KeyEvent e) {
}
}
答案 0 :(得分:2)
与您的问题无关,但不要使用静态方法和变量。这表明设计很差。
如果KeyListener不起作用,那么您的组件可能没有焦点。
此外,您实际上需要将KeyListener添加到组件中。首先阅读How to Write a Key Listener上的Swing教程。该示例应该可以帮助您,并向您展示更好的方法来设计您的程序,这样您就不会在任何地方使用静态。
答案 1 :(得分:2)
addKeyListener(...)
将 添加到组件中。你没有这样做,除非有机会,否则它将无效。 修改强>
你说:
如果我想在程序窗口最小化时使用KeyListener,该怎么办? 我的意思是使用快捷键暂停开始或停止程序
核心Java本身无法做到这一点。为此,您需要使用JNI或JNA扩充Java或使用特定于操作系统的实用程序。我已经将AutoIt用于我的Windows应用程序。