重画和Mouselistener Java

时间:2018-11-24 16:44:19

标签: java multithreading jframe mouselistener

所以我有一个自相矛盾的地方,我在主机上添加了一个mouseListener。当鼠标进入时,这会循环检查经过的时间是否超过某个限制,因此将其注册为保留状态。它必须在线程中,因为否则,我将无法检查点击,因为我的主线程将被阻止(或者会被阻止?)。但是问题是我想在仍然单击鼠标按钮的同时显示信息,要求我从线程内调用重绘,这将不起作用,因为重绘只能在主线程中进行,但是该线程必须免费MouseListener ... 有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

当鼠标进入时,它具有一个循环,以检查经过的时间是否超过了某个限制

不要使用循环。如果这是在侦听器中执行的,那么您将阻止事件调度线程(EDT)。

请改为使用Swing Timer。输入组件后,将启动计时器。然后,计时器会在您指定的时间间隔后生成一个事件。

但是,如果发生其他事件并且您想重置计时器,也可以停止计时器。

这不会阻止Event Dispatch Thread (EDT),事件仍将正常生成。

  

我想在仍然单击鼠标按钮的同时显示信息

不确定“仍然单击”是什么意思。如果仍然按下该按钮,并且您正在从ActionListener执行代码,则将阻止EDT,并且在长时间运行的任务完成之前,GUI无法重绘自身。

阅读Concurrency上Swing教程中的部分,以获取有关EDT的更多信息。