这里有两个类:
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可能会有一些麻烦,但我的观点是,它会被添加到主类中的Cls实例中)
现在,如果发生KeyEvent,keyPressed方法是在main()的线程中运行还是在Cls的线程中运行?询问是因为Cls的线程的run()方法将运行无限循环,所以如果在Cls的线程上运行,它将永远无法执行keyPressed。
此外,正如您所看到的Thing实例,obj在Main中被实例化,并按原样传递给Cls的构造函数。知道Cls不断修改obj和Main使用它(没有以任何方式修改它),用sychronized包装负责的代码块足以强制顺序访问吗?请随时提供您可能想要分享的任何见解。
发布于 2015-10-29 01:49:42
AWT事件侦听器在事件分派线程中执行。
https://stackoverflow.com/questions/33397979
复制相似问题