【发布时间】:2017-08-20 10:31:53
【问题描述】:
如果按下按钮,我有一个 GUI(在其 EDT 线程上)和另一个名为“Recorder”的线程,由 GUI 的 eventListener 创建:
if(actionEvent.getSource().equals(ui.record)) {
if(recorderThread == null) {
recorder = new Recorder();
recorderThread = new Thread(recorder);
recorderThread.start();
}
}
在同一个事件监听器中,我还实现了一个mouseListener。
public void mouseReleased(MouseEvent mEvent) {
int x, y;
x = mEvent.getXOnScreen();
y = mEvent.getYOnScreen();
}
单击鼠标时,我想将这些 X 和 Y 变量传递给记录器线程中的记录器对象。我想我可以用 volatile 变量提出一个解决方案,但我在某处读到处理程序可用于在两个线程之间传递信息或调用方法,并且有兴趣了解它。我发现this previous post 面临与我类似的问题。
然而,帖子的解决方案让我很困惑。我认为这个人将线程对象传递给处理程序,这样任何线程都可以调用该处理程序内的所有对象?例如:
handler(someObj);
然后在另一个线程中
handler.getSomeObj().methodInObj();
但我不完全确定处理程序是否是这样工作的。此外,他们似乎也在处理 Swing 的后台线程,而不是用户创建的单独线程(如果这是相同的概念,请提前道歉)。
最后,解决方案似乎调用了 Java 库中内置的 Handler 类,而我想编写自己的处理程序类,以便更好地了解线程如何通信(因为我是一个真正的新手 youtube 教程序员)。如果有人可以帮助我,将不胜感激。提前致谢!
【问题讨论】:
-
当您的 GUI 运行时,Recorder 到底在后台做什么?它正在进行什么活动?
-
此外,您永远不会在 线程 之间发送信息,而是在 对象 之间发送信息,这是一个微妙但非常重要的区别。
-
感谢您的澄清!记录器只是创建一个名为“Point”的对象列表,用于存储鼠标点击的 X 和 Y 位置,供自动点击器稍后使用。
标签: java multithreading swing handler