首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪个线程中调用keyPressed()方法?

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

Stack Overflow用户
提问于 2015-10-29 01:42:20
回答 1查看 148关注 0票数 0

这里有两个类:

代码语言:javascript
复制
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();

和:

代码语言:javascript
复制
public class Main extends JPanel {
     public static void main (String[] args)
     {
         Thing obj = new Thing(stuff);
         Cls cl = new Cls(obj);
         addKeyListener(cls);
         ...
     }

(现在如何添加KeyListener可能会有一些麻烦,但我的观点是,它会被添加到主类中的Cls实例中)

现在,如果发生KeyEventkeyPressed方法是在main()的线程中运行还是在Cls的线程中运行?询问是因为Cls的线程的run()方法将运行无限循环,所以如果在Cls的线程上运行,它将永远无法执行keyPressed

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

EN

回答 1

Stack Overflow用户

发布于 2015-10-29 01:49:42

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

阅读Swing concurrency tutorial

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33397979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档