2017-04-26 15 views
-3

在Swing应用程序中,当鼠标在框架内移动时,actionPerformed方法停止循环。我怎样才能解决这个问题?如何在窗格内移动鼠标时修复actionPerformed方法冻结?

这里是我的方案的基本布局:

ActionListener taskPerformer = new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      // main game loop 
     } 
} 

public void paintComponent(Graphics g) { 
    // render loop 
} 

我发现a similar question here。用户发现,通过降低鼠标的轮询速度,他们解决了问题;但是我无法更改我的苹果触控板上的轮询速率,也没有提供其他解决方案。此外,这是一个不雅的解决方案,需要用户更改设置,老实说,必须有更好的方法来解决问题。

基本的问题归结为:

  • 有没有办法为我投票率从我的计划之内的变化?我做了一些研究,但找不到解决方案。
  • 如何禁用鼠标移动事件,以便不会减慢我的游戏循环? (也可以将它移动到一个单独的进程中,并使用该进程提供的鼠标x和y位置作为游戏循环中的逻辑。)
  • 我可以使用什么备用解决方案来解决此问题?
+1

发表[MCVE] ... – user1803551

回答

0

我认为你需要实现“ActionListener的”在那里你可以带着它,因为当你正在将工作的ActionListener,当你将鼠标,这将是已经动作事件。 你也可以得到更多来自: https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.htmlHow can I get the location of the mouse pointer in a JPanel (Without any operation of the Mouse)?

+0

我已尝试执行,这是不是一个关于如何让鼠标定位的问题,我问怎么样我可以避免延迟问题。我发现的一个解决方案表明,降低鼠标轮询率解决了这个问题,但由于这是一个不一定可行的优雅解决方案(即在Mac上),我想要求另一种解决方案。我看了,而且我没有办法发现用java改变鼠标或触控板上的轮询速率。 – Teddy