Java时钟错误

时间:2013-11-20 00:58:23

标签: java swing jframe

我正在制作一个用Java显示时间的时钟,我将在下面显示代码:

public class MyApp extends javax.swing.JFrame {

      int timeRun = 0;  

    /**
     * Creates new form MyApp
     */
    public MyApp() {
        initComponents();
              System.out.println("We'll start here!");

        new Thread ()
        {
            public void Run(){

                while(timeRun == 0)
                {
                    Calendar cal = new GregorianCalendar();

                    int hour = cal.get(Calendar.HOUR);
                    int min = cal.get(Calendar.MINUTE);
                    int sec = cal.get(Calendar.SECOND);
                    int AM_PM = cal.get(Calendar.AM_PM);

                    String time = hour + ":" + min + ":" + sec;
                    System.out.print(time);
                    System.out.print("We'll end here!");

                }
            }

        }.start();

   }

我有一个JLabel,以及此JFrame工作所需的其他组件。

我也有主要设置,虽然你在上面的例子中看不到它 我的问题是,我不能从时间上获得价值,也不能在Run中打印“我们将在这里结束”,我是Java的新手,所以任何帮助都会非常感激。

我的控制台打印出来:

run:
We'll start here!
BUILD SUCCESSFUL (total time: 6 seconds)

2 个答案:

答案 0 :(得分:4)

您已经创建了一个帖子,但是您没有覆盖run方法 - 而是创建了一个Run方法。 Java区分大小写。改变这个:

public void Run() {
    ...
}

到此:

@Override
public void run() {
    ...
}

使用@Override要求编译器验证您确实 覆盖了某些内容 - 如果您以前使用过它,则会收到编译时错误。

此外,我建议您实施Runnable并将其传递给Thread构造函数,而不是覆盖run本身的Thread

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        ...
    }
};
new Thread(runnable).start();

同样,如果您实现了接口而不是创建Thread的匿名子类,编译器就会解决问题。

编辑:正如评论中所指出的那样,你的循环也是永无止境的......但是你会看到它实际上已经运行了。

答案 1 :(得分:1)

您必须 覆盖 的主题方法是 run 。因为那是你继承的那个,并且它实际上是运行什么线程必须做的。

所以:

  1. 这都是关于继承的。

  2. 在此类代码中添加@Override注释。 (IDE应该建议它。)

  3. 请记住,Java区分大小写。

  4. 坚持使用 Camel表示法。在Java中,所有都应该根据它进行编码。

    4.1类和接口应该以大写字母开头 4.2属性和方法应该以小写字母开头。

  5. 你应该做的:

    @Override
    public void run() {
    
        //Your code here
    }