Trong khi tôi di chuyển chuột chơi game của mình bên trong javax.swing.JFrame
, tất cả các ảnh động GIF (javax.swing.ImageIcon
bên trong một javax.swing.JLabel
) ngừng hoạt ảnh cho đến khi chuột ngừng di chuyển.GIF ngừng hoạt ảnh khi chuột di chuyển đang di chuyển
này chỉ xảy ra với một con chuột chơi game với một trình điều khiển trên MacOS (thử nghiệm nó với một XTD Rocket-Kone và một con chuột chơi game Razer trên hai máy tính). Khi tôi sử dụng những con chuột khác, mọi thứ đều hoạt động tốt.
Chuột chơi game cũng gây ra javax.swing.Timer
giây để dừng gọi các phương thức actionPerformed()
của chúng. I opened a thread here cho vấn đề này, nhưng điều này có thể được giải quyết bằng cách sử dụng java.util.TimerTask
thay thế. (Chỉnh sửa: Trên thực tế TimerTask cũng không khắc phục được vì JFrame không sơn lại cho đến khi con trỏ ngừng di chuyển.)
Nhưng tôi không tìm thấy thay thế cho hoạt ảnh GIF. Tôi quan tâm nhiều hơn để giải quyết vấn đề thay vì sử dụng các lựa chọn thay thế mặc dù tôi sẽ biết ơn vì một giải pháp thay thế.
Code:
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);
}
}
Chạy ứng dụng:
MCVE:
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);
}
}
Tôi đã thêm [mcve] làm bản chỉnh sửa. Bạn có thấy hành vi tương tự trong MCVE không? –
Yep nó không tạo sự khác biệt. – Yakuhzi
Huh .. nó hoạt động tốt ở đây. Đặt một số mã trong ví dụ để kết xuất phiên bản Java/phiên bản vi mô của JRE. –