Я пытаюсь создать приложение таймера на Java, но в процессе подсчета оно не выполнит основное (также открывая окно), пока счетчик не завершит работу.Вот что я имею в виду:
long timeElapsed = 0;
long timeStart = System.currentTimeMillis();
for (long counter=0;counter<5;++counter) {
TimeUnit.SECONDS.sleep(1);
timeElapsed = (System.currentTimeMillis() - timeStart)/1000;
display.setText(Long.toString(timeElapsed));
}
String myString = Long.toString(timeElapsed);
Программа не создаст окно, пока не закончится оператор for
, что плохо, потому что не отображает время до его выполнения, а это не то, к чему я стремлюсь,Есть ли способ обновить окно во время его работы, чтобы программа отображала истекшее время?
Мой код:
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.util.concurrent.TimeUnit;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JButton;
public class TimerGUI {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TimerGUI window = new TimerGUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
* @throws InterruptedException
*/
public TimerGUI() throws InterruptedException {
initialize();
}
/**
* Initialize the contents of the frame.
* @throws InterruptedException
*/
private void initialize() throws InterruptedException {
JLabel display = new JLabel("a");
// TIME
long timeElapsed = 0;
long timeStart = System.currentTimeMillis();
for (long counter=0;counter<5;++counter) {
TimeUnit.SECONDS.sleep(1);
timeElapsed = (System.currentTimeMillis() - timeStart)/1000;
display.setText(Long.toString(timeElapsed));
}
String myString = Long.toString(timeElapsed);
//WINDOW
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
// LABEL
//display = new JLabel(myString);
display.setBounds(165, 64, 89, 54);
frame.getContentPane().add(display);
//BUTTON
JButton btnNewButton = new JButton("New button");
btnNewButton.setBounds(165, 169, 89, 32);
frame.getContentPane().add(btnNewButton);
}
}
Примечание: я еще не использую часть программы с кнопками итакже код, который я пытаюсь исправить, находится в методе Initialize()
.