线程上有问题import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;//主类
public class ClockTest
{
public static void main(String[] args)
{
Clockframe frame=new Clockframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}class Clockframe extends JFrame
{
public Clockframe()
{
setTitle("时钟");
setSize(400,400);
panel=new Clockpanel();
panel.start();
add(panel,BorderLayout.CENTER);
}
private Clockpanel panel;
}//时钟界面类
class Clockpanel extends JPanel implements Runnable
{
public void paintComponent(Graphics g)
{
super.paintComponents(g);
g2=(Graphics2D)g;
Ellipse2D circle=new Ellipse2D.Double(100,100,r,r);
g2.draw(circle);
//获取时间
nowtime=Calendar.getInstance();
hour=nowtime.get(Calendar.HOUR_OF_DAY);
minute=nowtime.get(Calendar.MINUTE);
secend=nowtime.get(Calendar.SECOND);
//设置钟面
Font font=new Font("SansSerif",Font.BOLD,12);
g2.setFont(font);
drawstring("1",Math.toRadians(90-360*1/12),0.44*r);
drawstring("2",Math.toRadians(90-360*2/12),0.44*r);
drawstring("3",Math.toRadians(90-360*3/12),0.46*r);
drawstring("4",Math.toRadians(90-360*4/12),0.46*r);
drawstring("5",Math.toRadians(90-360*5/12),0.48*r);
drawstring("6",Math.toRadians(90-360*6/12),0.5*r);
drawstring("7",Math.toRadians(90-360*7/12),0.5*r);
drawstring("8",Math.toRadians(90-360*8/12),0.5*r);
drawstring("9",Math.toRadians(90-360*9/12),0.5*r);
drawstring("10",Math.toRadians(90-360*10/12),0.48*r);
drawstring("11",Math.toRadians(90-360*11/12),0.46*r);
drawstring("12",Math.toRadians(90-360*12/12),0.44*r);
//画时针
double hourAngle=Math.toRadians(90-360*hour/12);
drawHand(g2,hourAngle,0.2*r);
//画分针
g2.setColor(Color.blue);
double minuteAngle=Math.toRadians(90-360*minute/60);
drawHand(g2,minuteAngle,0.3*r);
//画秒针
g2.setColor(Color.red);
double secendAngle=Math.toRadians(90-360*secend/60);
drawHand(g2,secendAngle,0.4*r);
//画出时间
g2.drawString(hour+":"+minute+":"+secend,180,350); }
//画线方法
public void drawHand(Graphics2D g2,double angle,double length)
{
Point2D end=new Point2D.Double(
r+length*Math.cos(angle),
r-length*Math.sin(angle));
Point2D fist=new Point2D.Double(r,r);
g2.draw(new Line2D.Double(fist,end));
}
//画表盘的方法
public void drawstring(String s,double angle,double length)
{
int y=(int)(r-length*Math.sin(angle));
int x=(int)(r+length*Math.cos(angle));
g2.drawString(s,x,y);
}
public void start()//用于启动的标准程序
{
if (clockThread == null) //判断线程是否还未创建
clockThread = new Thread(this);
clockThread.start();//启动线程
}
public void run() //用于定义运行内容的标准程序
{
while (true)
{
try {
clockThread.sleep(1000);//休眠1秒
} catch (InterruptedException e){} //异常错误处理,防止出现中断错误
repaint();//重绘组件
}
}
private Thread clockThread;
private Graphics2D g2;
private int r=200;
private Calendar nowtime;
private int hour;
private int minute;
private int secend;
}
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;//主类
public class ClockTest
{
public static void main(String[] args)
{
Clockframe frame=new Clockframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}class Clockframe extends JFrame
{
public Clockframe()
{
setTitle("时钟");
setSize(400,400);
panel=new Clockpanel();
panel.start();
add(panel,BorderLayout.CENTER);
}
private Clockpanel panel;
}//时钟界面类
class Clockpanel extends JPanel implements Runnable
{
public void paintComponent(Graphics g)
{
super.paintComponents(g);
g2=(Graphics2D)g;
Ellipse2D circle=new Ellipse2D.Double(100,100,r,r);
g2.draw(circle);
//获取时间
nowtime=Calendar.getInstance();
hour=nowtime.get(Calendar.HOUR_OF_DAY);
minute=nowtime.get(Calendar.MINUTE);
secend=nowtime.get(Calendar.SECOND);
//设置钟面
Font font=new Font("SansSerif",Font.BOLD,12);
g2.setFont(font);
drawstring("1",Math.toRadians(90-360*1/12),0.44*r);
drawstring("2",Math.toRadians(90-360*2/12),0.44*r);
drawstring("3",Math.toRadians(90-360*3/12),0.46*r);
drawstring("4",Math.toRadians(90-360*4/12),0.46*r);
drawstring("5",Math.toRadians(90-360*5/12),0.48*r);
drawstring("6",Math.toRadians(90-360*6/12),0.5*r);
drawstring("7",Math.toRadians(90-360*7/12),0.5*r);
drawstring("8",Math.toRadians(90-360*8/12),0.5*r);
drawstring("9",Math.toRadians(90-360*9/12),0.5*r);
drawstring("10",Math.toRadians(90-360*10/12),0.48*r);
drawstring("11",Math.toRadians(90-360*11/12),0.46*r);
drawstring("12",Math.toRadians(90-360*12/12),0.44*r);
//画时针
double hourAngle=Math.toRadians(90-360*hour/12);
drawHand(g2,hourAngle,0.2*r);
//画分针
g2.setColor(Color.blue);
double minuteAngle=Math.toRadians(90-360*minute/60);
drawHand(g2,minuteAngle,0.3*r);
//画秒针
g2.setColor(Color.red);
double secendAngle=Math.toRadians(90-360*secend/60);
drawHand(g2,secendAngle,0.4*r);
//画出时间
g2.drawString(hour+":"+minute+":"+secend,180,350); }
//画线方法
public void drawHand(Graphics2D g2,double angle,double length)
{
Point2D end=new Point2D.Double(
r+length*Math.cos(angle),
r-length*Math.sin(angle));
Point2D fist=new Point2D.Double(r,r);
g2.draw(new Line2D.Double(fist,end));
}
//画表盘的方法
public void drawstring(String s,double angle,double length)
{
int y=(int)(r-length*Math.sin(angle));
int x=(int)(r+length*Math.cos(angle));
g2.drawString(s,x,y);
}
public void start()//用于启动的标准程序
{
if (clockThread == null) //判断线程是否还未创建
clockThread = new Thread(this);
clockThread.start();//启动线程
}
public void run() //用于定义运行内容的标准程序
{
while (true)
{
try {
clockThread.sleep(1000);//休眠1秒
} catch (InterruptedException e){} //异常错误处理,防止出现中断错误
repaint();//重绘组件
}
}
private Thread clockThread;
private Graphics2D g2;
private int r=200;
private Calendar nowtime;
private int hour;
private int minute;
private int secend;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货