В качестве тестового проекта я пытаюсь написать программу, которая вычисляет мой CPS.
Чтобы достичь этого, я использую Timer
, запланированный с фиксированной скоростью, для подсчета заданного времени в этом примере десять затем время отображается на JProgressBar
, в то время как пользователь пытается нажимать кнопку как можно чаще.
Но когда я запускаю таймер с помощью кнопки, это занимает около 10 секунд для таймера чтобы начать и заполнить бар.
Может быть, это только потому, что мой компьютер работает медленно?
Код
import javax.swing.*;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Timer;
import java.util.TimerTask;
public class MCPS {
JFrame frame;
JProgressBar timeProgress;
int stateTimeProgress;
JButton button;
Container pane;
boolean inGame;
int amountClicked;
boolean isMeasured;
int duration;
java.util.Timer timer;
public MCPS(int time){
stateTimeProgress = 0;
duration = time;
frame = new JFrame("CPS");
initLogic();
initFrame();
initProgressBar(duration);
initButton();
pane = new Container();
pane.setLayout(new FlowLayout());
init();
}
private void initProgressBar(int time) {
timeProgress = new JProgressBar(0, time);
timeProgress.setValue(0);
}
private void initLogic() {
inGame = false;
amountClicked = 0;
isMeasured = false;
}
private void startTimer(int time) {
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
stateTimeProgress++;
timeProgress.setValue(stateTimeProgress);
if(stateTimeProgress == time){
timer.cancel();
stopGame();
}
}
}, time*1000, 1000);
}
private void stopGame() {
inGame = false;
}
private boolean isInGame() {
return inGame;
}
private void initButton() {
button = new JButton("Start");
button.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
if(isInGame()){
amountClicked++;
}
else{
if(isMeasured == false) {
button.setText("Click me!");
startGame();
}
}
}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
});
}
private void startGame() {
inGame = true;
isMeasured = true;
startTimer(duration);
}
private void initFrame() {
frame.setResizable(true);
frame.setSize(350, 150);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
}
private void init() {
pane.add(button);
pane.add(timeProgress);
frame.add(pane);
frame.setVisible(true);
}
}