【问题标题】:Having Listener in new Thread在新线程中有监听器
【发布时间】:2015-01-02 05:40:09
【问题描述】:

我正在尝试将我的KeyListener 放在我的项目中名为Keys 的新Thread 中,因为我的主线程已经处于循环中。所以我希望这个方法返回一个boolean,无论是否按下键。我对 Java 很陌生,如果这只是一个愚蠢的错误,我很抱歉。

主题:

public class Keys implements KeyListener, Runnable {

    private boolean w = false;
    //private boolean ... same stuff

    public void keyTyped(KeyEvent keyEvent) {
        //nothing in here ;)
    }
    public void keyPressed(KeyEvent keyEvent) {
        //set right boolean true = no problem
    }
    public void keyReleased(KeyEvent keyEvent) {
        //set right boolean false = no problem
    }

    public void run() {
        //nothing to do here
    }

    public boolean isWPressed(){
        return w;
    }
    //public boolean is...() [more of them.]
}

我会很感激一个例子。这是我学习的最好方法。

【问题讨论】:

  • 1.类不返回值。 2. 您是否打算为您主线程中键盘上的每个键调用isXPressed()? 3. 为什么不按照设计的方法处理您的按键操作? (keyPressed)? 4. 你的问题到底是什么?
  • 1.固定的。 2. 仅适用于 4 键。 3. 告诉我怎么做 4. 我怎样才能让我的 Listener 工作。
  • 5 从 GUI 的线程调用监听器...如果监听器中的处理很繁重,那么您应该在不同的线程中启动它,这样 GUI 的线程就不会卡住。
  • 你能给我举个例子吗?正如我所说,我对 Java 还很陌生,无法准确理解您的意思。
  • @SJuan76 不重

标签: java multithreading return keylistener runnable


【解决方案1】:

您的程序未调用侦听器。当 apropiate 事件发生时,Java VM 调用侦听器。例如:假设您为TextField 写了KeyListener。如果用户开始输入此TextField,运行时系统将调用侦听器中的相应方法。因此,侦听器由 VM 调用,而不是由您的代码调用,因此您不能为 onw 线程编写它。 This link 很好地介绍了 Java 中的事件和监听器。

编辑

正如 SJuan76 所述,您可以从侦听器中启动单独的线程来执行您希望它们执行的操作。

【讨论】:

  • 所以我可以将我的KeyListener 放入已经在使用 while 循环的线程中,它可以创建一个新线程/向我的线程发送一些东西?
  • 没有。 KeyListener 只是一个对象。如 SJuan76 所述,该对象的方法由 Java VM 调用,Java VM 一起运行在一个单独的线程中。在尝试用 Java 进行线程处理之前,请专注于理解侦听器和事件。一步一步。
  • @JulianE。对象不能“放入”线程!相反,对象的方法由某个线程调用。如果你将你的关键监听器传递给一个新的线程实例(通过调用new Thread(new Keys())),你的类的run 方法将在这个新线程启动时被调用。就这样。没有魔法可以自动调用您的关键侦听器方法。
  • 可以给我一个简短的示例代码吗?
【解决方案2】:

您正在使用的 Java Key Listener 已经在它自己的线程上运行。无需尝试将其放入自己的线程中。

但是,如果您想在按下某个键时启动一个新线程,则可以读取 cmets。以下是您可能会采取的方法:

Thread thread = new Thread(this, "Keyboard Thread");

希望这有帮助!

【讨论】:

    猜你喜欢
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多