线程hibernate阻止我的Swing应用程序执行

我的应用程序发生了什么有意义,但我不知道如何解决它。 以下是我的应用程序的简要说明:应在屏幕右下方显示一个计时器窗口并显示实时时间。 一小时后,它应该做一些动作(我还没有决定行动)。 我面临的问题是在Timer.java中,当我刷新实时计时器的秒数时,我正在使用线程hibernate,这阻止了我的所有应用程序继续执行,因此没有窗口显示。

这是我的代码和一些评论:
TimerFrame.java :应用程序的主框架

import java.awt.BorderLayout; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import javax.swing.JFrame; public class TimerFrame extends JFrame{ public TimerFrame(String title) { // TItle and Layout super(title); setLayout(new BorderLayout()); // Create the time panel and add it final TimerPanel tp = new TimerPanel(); add(tp, BorderLayout.CENTER); // Timer is a class I've created, and it fires an event every second Timer time = new Timer(); time.addTimeListener(new TimeListener() { public void refresh(String time) { tp.setText(time); } }); // Configuration setSize(300,300); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice defaultScreen = ge.getDefaultScreenDevice(); Rectangle rect = defaultScreen.getDefaultConfiguration().getBounds(); int x = (int) rect.getMaxX() - getWidth(); int y = (int) rect.getMaxY() - getHeight(); this.setLocation(x, y); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } } 

TimePanel.java :应在屏幕上显示实时时间的面板

 import java.awt.Font; import javax.swing.JLabel; import javax.swing.JPanel; public class TimerPanel extends JPanel{ private JLabel label; public TimerPanel() { label = new JLabel("Start Time"); label.setFont(new Font("Arial",Font.BOLD,40)); add(label); } public void setText(String text){ label.setText(text); } } 

TimerListener.java :监听器接口

 public interface TimeListener { public void refresh(String time); } 

Timer.java :给出实时时间,并每秒触发一次名为刷新的事件。 在这个calss中,thread.sleep()导致我的应用程序停止执行。

 import java.text.SimpleDateFormat; import java.util.Calendar; public class Timer { private TimeListener sl = null; public Timer() { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); boolean start = true; int StartHour = 0; while(true){ try { // Get current time Calendar cal = Calendar.getInstance(); // Initialize Start hour if(start){ StartHour = getHour(cal, sdf); start = false; } // Fire event if(sl != null) sl.refresh(sdf.format(cal.getTime())); // If one hour if(getHour(cal, sdf) - StartHour == 1){ // Code goes here // Reset start start = true; } // Delay 1 Sec Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * Get Current Hour * @param cal Calentder * @param sdf Date format * @return Current Hour */ public static int getHour(Calendar cal, SimpleDateFormat sdf){ sdf.applyPattern("HH"); int hour = Integer.parseInt(sdf.format(cal.getTime())); sdf.applyPattern("HH:mm:ss"); return hour; } /** * Add Time Listener * @param sl TimeListener */ public void addTimeListener(TimeListener sl){ this.sl = sl; } } 

有没有人知道如何让我的应用程序执行,同时有一个无限运行的thread.sleep()? 谢谢 :)

有没有人知道如何让我的应用程序执行时有一个thread.sleep()

不要使用Thread.sleep()。

而是使用Swing Timer 。 您将Timer设置为每秒触发一次,以便更新组件。