Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java mouselistener与windows xp和mac os的区别_Java_Windows_Macos_Swing_Listener - Fatal编程技术网

java mouselistener与windows xp和mac os的区别

java mouselistener与windows xp和mac os的区别,java,windows,macos,swing,listener,Java,Windows,Macos,Swing,Listener,我正在实现一个JavaSwingGUI,它有两个JLabel,它们在JFrame上显示了几次。出于这个原因,我实例化了标签并将它们存储在一个向量中。对于每个标签,我在JFrame扩展类的构造函数中添加了如下侦听器: b1.addMouseListener(new LabelMouseListener(...)); 每次我想显示标签时,我都会从向量中拾取它们,并将它们作为一个组件添加到框架中。这个很好用。还有,我在构造函数中添加的侦听器正在侦听。但是,在Mac电脑和PC电脑上的行为是有区别的。在

我正在实现一个JavaSwingGUI,它有两个JLabel,它们在JFrame上显示了几次。出于这个原因,我实例化了标签并将它们存储在一个向量中。对于每个标签,我在JFrame扩展类的构造函数中添加了如下侦听器:

b1.addMouseListener(new LabelMouseListener(...));
每次我想显示标签时,我都会从向量中拾取它们,并将它们作为一个组件添加到框架中。这个很好用。还有,我在构造函数中添加的侦听器正在侦听。但是,在Mac电脑和PC电脑上的行为是有区别的。在Mac电脑上,它工作完全正常,但在PC(Win XP)上,我需要在侦听器做出反应之前单击标签两次。
LabelMouseListener实现MouseListener,我重写mouseClicked方法。也许这也取决于JavaRE,因为在Mac上我使用1.6,在Win上我使用1.7。这是一个已知的问题,或者您对错误的原因有何建议?

我无法在Windows XP上重现此问题-您确定在新闻发布期间没有移动鼠标-这会阻止鼠标单击事件?通常情况下,最好使用mousePressed或MouseRelease,而不是mouseClicked,因为这一点。另请参阅MouseEvent#isPopupTrigger()javadoc以了解平台差异。它可能与事件处理程序中编码的逻辑有关。我从来没有看到过这种平台特定的差异。这篇文章说明了问题所在。我想我掉进了一个常见的陷阱。我没有在监听器中启动新线程,因此监听器一直等到旧线程准备就绪后才能再次触发事件。由于mac是一台速度稍快的机器,因此错误被监控。我无法在Windows XP上重现此错误-你确定在新闻发布期间没有移动鼠标-这可以防止鼠标点击事件?通常情况下,最好使用mousePressed或MouseRelease,而不是mouseClicked,因为这一点。另请参阅MouseEvent#isPopupTrigger()javadoc以了解平台差异。它可能与事件处理程序中编码的逻辑有关。我从来没有看到过这种平台特定的差异。这篇文章说明了问题所在。我想我掉进了一个常见的陷阱。我没有在监听器中启动新线程,因此监听器一直等到旧线程准备就绪后才能再次触发事件。由于mac是一台速度稍快的机器,因此错误被监控。