java闪屏_java 2D绘画出现闪屏有关问题~

java 2D绘画出现闪屏有关问题~

java 2D绘画出现闪屏有关问题~

日期:2014-05-20  浏览次数:20305 次

java 2D绘画出现闪屏问题~~急

用java 2D绘图,用Image 载入图片,发觉屏幕闪动。之后在网上查资料,发现可以用BufferedImage实现图片双缓冲。但是我实现之后,效果还是一样。

之后干脆把图片去掉。直接画直线跟圆,让圆运动(利用线程控制住时间),可是依旧出现闪屏现象。如此便纠结了。

发觉,应该是线程调用了repaint()重绘方法。知道调用repaint()会自动调用paint()—>update()-->paint(),问题出现在update上,可是,重写update()没头绪。希望高手指点一下。

package drawing;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.geom.Line2D;

import javax.swing.JFrame;

public class Ball extends JFrame {

int coordinateX =10,coordinateY = 344;

int LineCX =224,LineCY = 170;

int on_off = 0;

int on_off_Line = 2;

int values = 1;

int openLight =0;

final String message1 = "1";

final String message0 = "0";

int messageGo = 0;

String m = "O";

Thread thread = new Thread();

Image light,light3;

Graphics2D g2d;

Thread autoThread;

boolean running = false;

public Ball(){

super("仿造电路"); //调用父类构造函数

setSize(800,700); //设置窗口尺寸

setBackground(Color.cyan);

setVisible(true); //设置窗口可视

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序

light3 = Toolkit.getDefaultToolkit().getImage("D:\\Program Files\\VC++6.0\\eclipse-java-indigo-SR2-win32\\eclipse\\workspace\\draw\\src\\DH\\电路灯.gif");

light = Toolkit.getDefaultToolkit().getImage("D:\\Program Files\\VC++6.0\\eclipse-java-indigo-SR2-win32\\eclipse\\workspace\\draw\\src\\DH\\red_blue1.gif");

}

public void paint(Graphics g){ //绘制组件方法

g2d=(Graphics2D)g;

Dimension dim = this.getSize();

g2d.setColor(Color.white); //设置绘制颜色为白色

g2d.fillRect(0, 0, dim.width, dim.height);

g2d.setStroke(new BasicStroke(4));//设置线条粗细

g2d.setColor(Color.black); //设置绘制颜色

g2d.drawRoundRect(46,343,14,14,14,14); //开始的小圆圈

g2d.draw(new Line2D.Double(220, 490,240,490));//小横线

g2d.drawString(m, coordinateX, coordinateY);

BallThread b = new BallThread();

b.start();

}

class BallThread implements Runnable {

public void start(){

if(autoThread == null){

autoThread = new Thread(this);

autoThread.start();

}

}

@Override

public void run() {

Thread currentThread = Thread.currentThread();

while(autoThread == currentThread){

try{

Thread.sleep(5);

}catch(InterruptedException e){

e.printStackTrace();

}

if(coordinateX<190){

coordinateX=coordinateX+4;

}

if(coordinateX==190){

stop();

免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值