我是初学java的新手我在重写的paint方法中加入了一个计时器,想要在绘出文字3秒之后,绘制出新的文字paint部分的代码如下:@Overridepublic void paint(Graphics g) {// TODO Auto-generated method stubsuper.paint(g);//设置背景颜色为灰色this.setBackground(Color.gray);//属性设置g.setColor(Color.white);Font fLevel = new Font("黑体", 0, 100);g.setFont(fLevel);//输出字g.drawString("测试", 280, 300);//暂停三秒钟Timer t = new Timer(true);t.schedule(new TimerTask() {@Overridepublic void run() {// TODO Auto-generated method stub//用新的矩形覆盖原来的界面g.setColor(Color.gray);g.fillRect(0, 0, 800, 600);//输出延迟3秒后的字g.drawString("测试", 20, 20);}}, 3000);然而这样并没有什么反应,依旧是原来的文字。我试着将run方法中的代码改为system.out.println("测试");却成功地在3秒后输出了。请问这是什么原因?
1 回答

忽然笑
TA贡献1806条经验 获得超5个赞
Graphics在paint过后会被dispose()。所以在异步的线程中你的Graphics已经不能再使用了。要做到3秒后更新可以在类的里面定义一些作图的属性,包括颜色、位置等,然后在timer里面修改属性的值然后调用repaint方法
添加回答
举报
0/150
提交
取消