java键盘事件触发

我的java程序为什么键盘事件没有反应呢,求解先谢谢了。

package ptest;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
public class MouseMoved implements MouseMotionListener,KeyListener{
  private JFrame frame;
  private  JTextField tf;
  
    public static void main(String[] args) {
        MouseMoved m=new MouseMoved();
   m.go();
    }
public void go() {
    frame=new JFrame("MouseMoved Frame");
    Container contentPane=frame.getContentPane();
    contentPane.add(new Label("Click and drag the mouse"),BorderLayout.NORTH);
    tf=new JTextField(30);
    contentPane.add(tf,BorderLayout.SOUTH);
     frame.addMouseMotionListener(this);
    frame.addKeyListener(this);
    frame.setSize(300,300);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void mouseMoved(MouseEvent e) {
    String s="Mouse Moved: X="+e.getX()+" Y="+e.getY();
    tf.setText(s);
    //System.out.println("mouse running ...");
}
@Override
public void mouseDragged(MouseEvent e) {
    // TODO Auto-generated method stub
    
}
@Override
public void keyTyped(KeyEvent e) {
    // TODO Auto-generated method stub
    
}
@Override
public void keyPressed(KeyEvent e) {
    System.out.println("running...");
    // String k=" Key Press: "+e.getKeyCode();
    String k="";
     if(e.getKeyCode()==KeyEvent.VK_CONTROL) k="C";
     //tf.setText(k);
    System.out.println("C");
}
@Override
public void keyReleased(KeyEvent e) {
    // TODO Auto-generated method stub
    System.out.println("Key Released..");
}
}


frame.addKeyListener(this);
换成
tf.addKeyListener(this);
就可以了

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7775463
  • 这篇博客你也可以参考下:java程序员电脑重置及配置全过程,注意事项
  • 同时,你还可以查看手册:java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-类和对象》描述了如何编写创建对象的类,以及如何创建和使用对象。-课堂 中的内容
  • 除此之外, 这篇博客: 【JAVA系列】关于异常的一些事中的 2.异常类的处理流程 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    。习惯上将Error类与Exception类统称为异常类,但二者本质上是不同点。
    Error类通常指的是Java虚拟机出错,用户无法在程序里处理这种错误。
    Exception类包含了一般性的异常,这些异常在捕捉到之后便可做妥善的处理,以确保程序继续运行。

    下面是异常处理的流程:

    1. 如果程序发生异常,那么会自动地由JVM根据异常的类型,实例化一个指定异常类的对象,如果这个时候程序之中没有任何的异常操作,则这个异常类的实例化对象将交给JVM进行处理——进行异常信息的输出,而后中断程序执行
    2. 如果程序之中存在异常处理,则会由try语句捕获产生的异常类对象;然后将该对象与try之后的catch进行匹配,如果匹配成功,则使用指定的catch进行处理,如果没有匹配成功,则向后面的catch继续匹配,如果没有任何的catch匹配成功,则这个时候将交给JVM执行默认处理。
    3. 不管是否有异常都会执行finally程序,如果此时没有异常,执行完finally,则会继续执行程序之中的其他代码,如果此时有异常没有能够处理(没有一个catch可以满足),那么也会执行finally,但执行完finally之后,将默认交给JVM进行异常信息的输出,并且程序中断。
  • 您还可以看一下 唐世林老师的Java面试题精选集锦课程中的 【Java基础】什么是内存泄漏,与内存溢出有什么关系?小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^