Ваш код действительно содержит несколько ошибок и потенциальных проблем, которые следует исправить. Исправленный код с комментариями по изменениям:
Импорты для Color и Font должны быть явными.Нужно установить правильное расположение компонентов на панели.Таймер должен обновлять значение в отдельном потоке для правильной работы UI.Логика таймера должна быть корректной и уменьшать время.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TimerApp {
public static void main(String[] args) {
JFrame frame = new JFrame("Таймер 2000");
frame.setSize(720, 400);
frame.setResizable(false);
frame.getContentPane().setBackground(Color.BLACK);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
JLabel title = new JLabel("Таймер 2000");
title.setForeground(Color.GREEN);
title.setBackground(Color.BLACK);
title.setFont(new Font("Helvetica", Font.BOLD, 18));
title.setBounds(300, 10, 150, 30);
frame.add(title);
JLabel version = new JLabel("version: Alpha 1.0");
version.setForeground(Color.GRAY);
version.setBackground(Color.BLACK);
version.setBounds(300, 50, 150, 30);
frame.add(version);
JLabel generalTimer = new JLabel("01:00:00");
generalTimer.setForeground(Color.RED);
generalTimer.setBackground(Color.BLACK);
generalTimer.setFont(new Font("Helvetica", Font.BOLD, 18));
generalTimer.setBounds(300, 90, 150, 30);
frame.add(generalTimer);
JButton startTimer = new JButton("Старт");
startTimer.setForeground(Color.BLUE);
startTimer.setBackground(Color.GREEN);
startTimer.setFont(new Font("Helvetica", Font.BOLD, 18));
startTimer.setBounds(300, 130, 100, 30);
startTimer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Thread(() -> timer(generalTimer)).start();
}
});
frame.add(startTimer);
frame.setVisible(true);
}
public static void timer(JLabel generalTimer) {
try {
int hours = 1;
int minutes = 0;
int seconds = 0;
while (hours > 0 || minutes > 0 || seconds > 0) {
// Update the timer label
generalTimer.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));
// Wait for one secon