我正在制作一个用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)
答案 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
。因为那是你继承的那个,并且它实际上是运行什么线程必须做的。
所以:
这都是关于继承的。
在此类代码中添加@Override
注释。 (IDE应该建议它。)
请记住,Java区分大小写。
坚持使用 Camel表示法。在Java中,所有都应该根据它进行编码。
4.1类和接口应该以大写字母开头 4.2属性和方法应该以小写字母开头。
你应该做的:
@Override
public void run() {
//Your code here
}