Java 为什么我的钟不能正常工作?
我目前正在使用StandardPen类在java中开发一个时钟。一切似乎都正常,除了当我在运行程序时达到大约6-10分钟时,时钟开始闪烁。这个错误似乎是在我加了时针之后出现的。 时针与秒针和分针编码不同的原因是因为线程。睡眠(20)不能以时针的速度工作。谁来帮我快点修好Java 为什么我的钟不能正常工作?,java,clock,turtle-graphics,Java,Clock,Turtle Graphics,我目前正在使用StandardPen类在java中开发一个时钟。一切似乎都正常,除了当我在运行程序时达到大约6-10分钟时,时钟开始闪烁。这个错误似乎是在我加了时针之后出现的。 时针与秒针和分针编码不同的原因是因为线程。睡眠(20)不能以时针的速度工作。谁来帮我快点修好 import java.awt.Color; import TurtleGraphics.StandardPen; public class Clock_Final { public static void main(
import java.awt.Color;
import TurtleGraphics.StandardPen;
public class Clock_Final {
public static void main(String[] args) {
StandardPen pen = new StandardPen();
double num=90, num1 = 90, num3 = 90, loop = 1, minute = 90, minuteclear = 90, cont = 0, cont2 = 0, tick1 = 90, hour = 90, hourclear = 90, hourcount = 0, hourcount1 = 0;
String three = "3", six = "6", nine = "9", twelve = "12", signature = "Created by: Me";
pen.setColor(Color.black);
pen.up();
pen.setDirection(270);
pen.move(350);
pen.setDirection(180);
pen.move(60);
pen.drawString(signature);
pen.down();
pen.home();
//twelve
pen.setColor(Color.black);
pen.up();
pen.setDirection(90);
pen.move(280);
pen.setDirection(180);
pen.move(7);
pen.down();
pen.drawString(twelve);
pen.home();
//three
pen.up();
pen.setDirection(0);
pen.move(278);
pen.setDirection(270);
pen.move(5);
pen.down();
pen.drawString(three);
pen.home();
//six
pen.up();
pen.setDirection(270);
pen.move(290);
pen.setDirection(180);
pen.move(3);
pen.down();
pen.drawString(six);
pen.home();
//nine
pen.up();
pen.setDirection(180);
pen.move(285);
pen.setDirection(270);
pen.move(5);
pen.down();
pen.drawString(nine);
pen.home();
//_-_-_outside of the clock (the circle)
for (cont = 0; cont < 360; cont++) {
pen.setColor(Color.black);
pen.setDirection(num);
pen.setWidth(8);
pen.up();
pen.move(270);
pen.down();
pen.move(2);
pen.home();
num--;
if (num==0) {
num = 360;
}
}
//tick start
for (cont2=0;cont2<60;cont2++) {
pen.setColor(Color.gray);
pen.setDirection(tick1);
pen.setWidth(3);
pen.up();
//method for minute/second ticks (start)
if (tick1 == 0 || tick1 == 30 || tick1 == 60 || tick1 == 90 || tick1 == 120 || tick1 == 150 || tick1 == 180 || tick1 == 210 || tick1 == 240 || tick1 == 270 || tick1 == 300 || tick1 == 330) {
if (tick1 == 0 || tick1 == 90 || tick1 == 180 || tick1 == 270) {
pen.setColor(Color.black);
pen.setWidth(5);
pen.move(225);
pen.down();
pen.move(39);
pen.setColor(Color.gray);
} else {
pen.setColor(Color.darkGray);
pen.move(230);
pen.down();
pen.move(34);
pen.setColor(Color.gray);
}
} //method for minute ticks (end)
else if (tick1 != 0 || tick1 != 30 || tick1 != 60 || tick1 != 90 || tick1 != 120 || tick1 != 150 || tick1 != 180 || tick1 != 210 || tick1 != 240 || tick1 != 270 || tick1 != 300 || tick1 != 330) {
pen.move(250);
pen.down();
pen.move(14);
}
pen.home();
if (tick1 == 0) {
tick1 = 360;
}
tick1 = tick1 - 6;
}
while (loop == 1) {
pen.setWidth(2);
//draw new second hand
pen.setColor(Color.red);
pen.setDirection(num1);
pen.move(220);
if (num1 < .05) {
num1 = 360;
}
num1 -= .3;
//draw new minute hand
pen.home();
pen.setColor(Color.darkGray);
pen.setDirection(minute);
pen.move(200);
if (minute == 1) {
minute = 360;
}
minute -= .005;
//draw new hour hand
pen.home();
pen.setColor(Color.darkGray);
pen.setDirection(hour);
pen.move(160);
if (hour == 0) {
hour = 360;
}
hourcount+=.05;
if (hourcount % 360 == 0) {
hour -= 1;
}
//sleep
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
//clear old second hand
pen.home();
pen.setColor(Color.white);
pen.setDirection(num3);
pen.move(220);
if (num3 < .05) {
num3 = 360;
}
num3 -= .3;
pen.home();
//clear old minute hand
pen.home();
pen.setColor(Color.white);
pen.setDirection(minuteclear);
pen.move(200);
if (minuteclear == 0) {
minuteclear = 360;
}
minuteclear -= .005;
pen.home();
//clear old hour hand
pen.home();
pen.setColor(Color.white);
pen.setDirection(hourclear);
pen.move(160);
if (hourclear == 0) {
hourclear = 360;
}
hourcount1+=.05;
if (hourcount1 % 360 == 0) {
hourclear -= 1;
}
pen.home();
}
}
}
导入java.awt.Color;
导入TurtleGraphics.StandardPen;
公共课时钟期末考试{
公共静态void main(字符串[]args){
标准笔=新的标准笔();
双倍数值=90,num1=90,num3=90,循环=1,分钟=90,分钟清除=90,持续=0,持续2=0,滴答=90,小时=90,小时数=90,小时数=0,小时数=0,小时数=0;
字符串3=“3”、6=“6”、9=“9”、12=“12”、签名=“创建人:我”;
钢笔颜色(颜色:黑色);
pen.up();
笔方向(270);
移动笔(350);
笔设置方向(180);
移动笔(60);
钢笔、抽绳(签名);
pen.down();
pen.home();
//十二
钢笔颜色(颜色:黑色);
pen.up();
笔方向(90);
移动笔(280);
笔设置方向(180);
钢笔。移动(7);
pen.down();
钢笔、抽绳(十二支);
pen.home();
//三
pen.up();
笔设置方向(0);
钢笔移动(278);
笔方向(270);
笔。移动(5);
pen.down();
钢笔、抽绳(三根);
pen.home();
//六
pen.up();
笔方向(270);
移动笔(290);
笔设置方向(180);
笔。移动(3);
pen.down();
钢笔、抽绳(六根);
pen.home();
//九
pen.up();
笔设置方向(180);
钢笔移动(285);
笔方向(270);
笔。移动(5);
pen.down();
钢笔、抽绳(九根);
pen.home();
//_-_-_时钟外(圆圈)
对于(cont=0;cont<360;cont++){
钢笔颜色(颜色:黑色);
笔设置方向(num);
笔设置宽度(8);
pen.up();
移动笔(270);
pen.down();
笔。移动(2);
pen.home();
num--;
如果(num==0){
num=360;
}
}
//滴答声开始
对于(cont2=0;cont2我想你指的是“突然退出”,你指的是浪费时间?使用睡眠的问题()驱动时钟意味着你永远不知道它已经睡了多长时间,而绘制时钟也需要时间。小的计时错误会随着时间的推移而累积。同时,多任务和线程调度意味着你永远不知道实际经过了多少时间。你仍然可以使用sleep()来决定何时绘制时钟,但你需要“获取”实际时间,并在此基础上绘制时钟。请参阅:new Date()和GregoriaCalendar()
这是我写的一个时钟渲染器,它使用这个方法
FYI,像、java.text.SimpleDateFormat
这样麻烦的旧日期时间类现在被内置在java 8和java 9中的类所取代。请看。我确实在2014年1月发布了这个答案。我的评论不是批评,只是给今天的读者的一个注释。@BasilBourque对不起,你是对的。我可能不需要写谢谢你的留言:)时间过得真快(格雷戈里安卡伦达笑话)
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(new Date()); // current time
int mins = calendar.get(Calendar.MINUTE);
// etc..