Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我不能添加密钥侦听器?_Java_Keylistener - Fatal编程技术网

Java 为什么我不能添加密钥侦听器?

Java 为什么我不能添加密钥侦听器?,java,keylistener,Java,Keylistener,我正试图在我的程序中使用keylister。 我已将该类添加到我的主类中: class CustomKeyListener implements KeyListener{ @Override public void keyTyped(KeyEvent k) {} @Override public void keyPressed(KeyEvent k) {} @Override public void keyReleased(KeyEvent k

我正试图在我的程序中使用
keylister
。 我已将该类添加到我的主类中:

class CustomKeyListener implements KeyListener{
    @Override  
    public void keyTyped(KeyEvent k) {}
    @Override
    public void keyPressed(KeyEvent k) {}
    @Override
    public void keyReleased(KeyEvent k) {}    
}
但是,我无法在主类的任何位置添加
addKeyListener(new CustomKeyListener())
方法。 我错过了什么

根据我以前的经验,我知道它只适用于图形界面。我是否应该添加一些任意形式,它就可以工作


有人能解释一下这个问题吗?

您的主类是否实现/扩展了一个实际支持您尝试使用的方法的类

关于你的主要职业是什么以及你想要达到什么的一些背景。 这可能是你需要的扫描仪吗? 如果是这样的话,那么看看这里,学习如何使用它。

这也可能有帮助:

您的类应该具有
addKeyListener
方法。如果您的类是从Component或JComponent派生的,则会出现这种情况。因此,您应该从这些类中的任何一个派生类,如下所示:

class MyClass extends JComponent
注意,继承不必是直接的;如果您的类是从(例如)JFrame派生的,那么它会间接继承
addKeyListener
方法,因为JFrame本身是从组件派生的

此外,正如在的答案中所指出的,您的类应该是可聚焦的,以便关键的侦听器工作

更新

您在试图使用的评论中写道

this.addKeyListener( new CustomKeyListener( ) );
并且得到了错误

无法在静态上下文中使用此选项

发生这种情况是因为您调用的是静态方法(本例中是
main
方法)。
引用类的当前实例。在静态方法中,没有实例——这实际上是静态方法的定义

您应该做的是创建一个实例:

MyClass newInstance = new MyClass( );
现在,您可以将密钥侦听器添加到该实例:

MyClass newInstance = new MyClass( );
您还可以在实例方法(任何没有关键字
static
的方法)中执行此操作,并从实例中调用该方法


官方Java教程中有更多关于这个主题的内容。

您想将KeyListener添加到什么中?“一些仲裁形式”听起来不太合适。如果您想这样做,您需要构建希望用户看到和使用的图形用户界面。@OleV.V。我是唯一的用户。我只想添加这个keylistener,这样我就能够捕捉到任何按键操作,从而停止一些循环过程。就是这样。如果您要向“this”添加KeyListener,那么该类必须扩展JComponent(JFrame、JDialog等),否则它将无法工作。我怀疑您只是试图解决编译问题,这是做错了。你需要了解你正在开发什么,以及你正在将密钥侦听器添加到哪个用户界面元素(在屏幕上可见)。我已经尝试了
Scanner
方法,但没有成功。我是否也应该将
实现KeyListener
添加到我的主类中?几乎<代码>无法访问MyClass类型的封闭实例。必须使用MyClass类型的封闭实例(例如x.new A(),其中x是MyClass的实例)来限定分配。按照您所说的做了,现在我得到了这个错误。MyClass现在是我的主类,在主类之外有
CustomKeyListener
可能是最容易的。一旦你有了更多的经验,就可以学习内部类。或者按照错误消息的建议执行:
addKeyListener(MyClass.new CustomKeyListener())