我开始学习java并完成教程,但是在尝试制作数字时钟动画时遇到了问题。代码是:
import java.awt.Graphics;
import java.awt.Font;
import java.util.Date;
public class DigitalClock extends java.applet.Applet {
Font theFont = new Font("Helvetica",Font.BOLD,24);
Date theDate;
public void start() {
while (true) {
theDate = new Date();
repaint();
try {Thread.sleep(1000); }
catch (InterruptedException e) { }
}
}
public void paint(Graphics g) {
g.setFont(theFont);
g.drawString(theDate.toString(),10,50);
}
}
我正在使用以下方式查看小程序:
<HTML>
<HEAD>
<TITLE>This page has an applet on it</TITLE>
</HEAD>
<BODY>
<P>Digital Clock:
<BR>
<APPLET CODE = "DigitalClock.class" WIDTH=300 HEIGHT=100>
</APPLET>
</BODY>
</HTML>
我正在编译: javac DigitalClock.java -Xlint
提供警告(无错误):
DigitalClock.java:10: warning: [serial] serializable class DigitalClock has no definition of serialVersionUID
public class DigitalClock extends java.applet.Applet {
动画根本没有出现(小程序打开但窗口中没有任何内容)。我假设这与警告有关,虽然从一些研究中,我认为这意味着该课程没有被正确调用,但我不明白为什么会这样。
请注意:这是我在java工作的第一周,我非常基础!
提前感谢您提供任何建议。
答案 0 :(得分:0)
添加以下行:
private static final long serialVersionUID = 1L;
在一切之前。那应该摆脱警告。
答案 1 :(得分:0)
警告可以忽略,不是不可视化applet的原因。解决警告包括:
private static final long serialversionUID = 1L;
今天所有浏览器都不支持applet标记,请检查http://www.w3schools.com/TAgs/tag_applet.asp,因此请务必使用兼容的标记。同时在宽度和高度值中加上引号,如下所示:
<APPLET CODE = "DigitalClock.class" WIDTH="300" HEIGHT="100">
答案 2 :(得分:0)
这里有两个不同的问题。
首先是您的警告:它告诉您没有serialVersionUID
,如果您想通过互联网传输班级实例,那么这只是一个ID。将此行添加到类的开头,这应该消失:
private static final long serialVersionUID = 1L;
您的第二个问题是您使用的是Chrome中不支持的标记,并且在HTML5中并不标准,这意味着它很快就会消失。请尝试使用<object>
。
可能导致其无法显示的原因是您在while(true)
方法中有start()
这一事实。虽然我不熟悉这些内容的工作方式,但您可能希望将其移至another thread中的单独方法,以免它阻止start()
方法完成,这可能反过来阻止它渲染。
最好保持将渲染时间与渲染时间分开的方法更好,因为如果你的渲染滞后,你就不希望时间停止计算直到它恢复。即使渲染停止了几分钟,你的时钟应该是准确的,因为这就是时钟的工作原理。