在哪个线程中调用keyPressed()方法?

时间:2015-10-28 17:42:20

标签: java multithreading keylistener

这是两个类:

public class Cls implements Runnable, KeyListener
Thread t;
Object obj;
public Cls(Thing obj) {
      this.obj = obj;
...

void keyPressed(KeyEvent e) {
...
}

void run() {
...

void start() {
if (t != null)
   t = new Thread(this, "we");
t.start();

public class Main extends JPanel {
     public static void main (String[] args)
     {
         Thing obj = new Thing(stuff);
         Cls cl = new Cls(obj);
         addKeyListener(cls);
         ...
     }

(暂时如何添加KeyListener可能会有一些不准确之处,但我的观点是它会被添加到Main类中的Cls实例中

现在,如果发生KeyEventkeyPressed方法会在main()的主题或Cls'中运行吗?提问,因为Cls线程的run()方法会运行一个无限循环,所以如果keyPressed运行它将永远无法执行Cls '线。

另外,正如您可以看到Thing个实例,obj已在Main中实例化并传递到Cls'构造函数原样。知道Cls不断修改obj而Main使用它(不以任何方式修改它),是否用sychronized包装负责的代码块足以强制执行顺序访问?请随时提供您可能想要分享的任何见解。

1 个答案:

答案 0 :(得分:4)

AWT事件侦听器在事件派发线程中执行。

阅读Swing concurrency tutorial