基本上我需要我的一塊麪板每秒至少重漆60次。但是我注意到,如果我不移動鼠標,FPS會下降到5。我編寫了程序來測試它。Java Swing忽略repaint()?
package test;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Test extends JFrame implements ActionListener {
Timer t;
JLabel l;
JPanel p;
long lastT;
public static void main(String[] args){
new Test();
}
public Test(){
add(p = new JPanel());
p.add(l = new JLabel("0000000000000000000000000000000"));
pack();
lastT = System.nanoTime();
t = new Timer(10, this);
t.setRepeats(true);
t.start();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
long time = System.nanoTime();
l.setText(String.valueOf((time - lastT)));
repaint();
lastT = time;
}
}
它顯示幀之間的間隔。如果我的鼠標在窗口內部,它的變化速度要快得多,如果它在窗口之外,它會變得非常慢,類似於我原來的問題。但事實是,無論鼠標在裏面還是外面,數字本身都沒有太大的差別,這意味着計時器以相同的間隔拍攝事件。所以這意味着重繪()被忽略?它如何被修復?
它工作正常,嘗試在另一臺機器上運行它。 – 11thdimension