2016-11-22 4 views
7

私のゲーム中のマウスをjavax.swing.JFrameの中に移動している間、すべてのアニメーションGIF(javax.swing.ImageIconjavax.swing.JLabel)はマウスの動きが止まるまでアニメーションが停止します。ゲーミングマウスが動いている間にGIFがアニメーションを停止する

この(ロケット-コネXTDと2台のコンピュータのRazerゲーミングマウスでそれをテストした)MacOSの上のドライバとのゲーミングマウスで発生します。他のマウスを使用すると、すべて正常に動作します。

また、javax.swing.Timerは、actionPerformed()メソッドの呼び出しを停止させる。この問題はI opened a thread hereですが、代わりにjava.util.TimerTaskを使用して解決できます。 (編集:実際には、TimerTaskはマウスが動かなくなるまでJFrameが再描画しないので、修正もしません)。

しかし、私はGIFをアニメーション化するための代替手段は見つけませんでした。私は代替案を使用するのではなく、問題を解決することにもっと関心があります。

コード:

enter image description here

MCVE:アプリケーション実行

import java.lang.reflect.InvocationTargetException; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 

public class Mouse { 
    public static void main(String[] args) { 
     try { 
      SwingUtilities.invokeAndWait(new Runnable() { 
       public void run() { 
        new Mouse(); 
       } 

      }); 
     } catch (InvocationTargetException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    public Mouse() { 
     JFrame frame = new JFrame(); 
     JLabel label = new JLabel(new ImageIcon(getClass().getResource("waiting.gif"))); 

     frame.setSize(500, 500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     frame.add(label); 
    } 
} 

import java.lang.reflect.InvocationTargetException; 
import java.net.*; 
import javax.swing.*; 

public class Mouse { 
    public static void main(String[] args) { 
     try { 
      SwingUtilities.invokeAndWait(new Runnable() { 
       public void run() { 
        try { 
         new Mouse(); 
        } catch (MalformedURLException ex) { 
         ex.printStackTrace(); 
        } 
       } 

      }); 
     } catch (InvocationTargetException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    public Mouse() throws MalformedURLException { 
     JFrame frame = new JFrame(); 
     JLabel label = new JLabel(new ImageIcon(
       new URL("https://i.stack.imgur.com/HXCUV.gif"))); 

     frame.setSize(500, 500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     frame.add(label); 
    } 
} 
+1

[mcve]を編集として追加しました。あなたはMCVEで同じ行動を見ますか? –

+0

それは違いはありません。 – Yakuhzi

+0

うー..ここでうまくいきます。 JREのJavaバージョン/マイクロバージョンをダンプするためのコードをいくつか入れてください。 –

答えて

1

を私は1000Hzのから私のマウスのポーリングレートを低減して、私は問題を解決しました500Hzまで。今はすべて完璧です。私は、UIスレッドが毎秒1000回のポーリングを処理するように過度に拡張されていたので、GIFをアニメーション化するのが忙しいという問題があったと思います。

関連する問題