大家来看看我的双缓冲对不对。。。 【已回复】

问题描述

我是想模拟那个windows的屏幕保护程序,用了我自己理解的双缓冲,但不知道做得对不对。屏幕依然闪得很厉害。如果不对的话,请各位帮助修改一下代码,小菜在此先谢谢了。importjava.util.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassMovedWordextendsJFrameimplementsRunnable{//variablesusedintheprogramRandomseed;//randomnumbertogetaintegerDimensiondScreen;//dimentiontogetthescreeninformationintxPosition,yPosition;//thexandypositionofthewordstringintxScreen,yScreen;//themaxxandypositionofthescreenintsleepTime;//timespanintfontSize;//fontsizeintsubLength;//sublengthofthepositionFontstringFont;//thefontofthestringStringscreenString;//thestringshownonthescreen//constructorsoftheclassmovedwordpublicMovedWord(){MouseHandlermouse=newMouseHandler();KeyHandlerkey=newKeyHandler();seed=newRandom();//setseedasarandomdScreen=Toolkit.getDefaultToolkit().getScreenSize();xScreen=dScreen.width;//getthemaxpositionofthescreenyScreen=dScreen.height;sleepTime=10;//setsleeptimesubLength=5;//setsublengthfontSize=72;//setthefontstringFont=newFont("黑体",Font.PLAIN,fontSize);screenString="这是一个测试字符串";xPosition=xScreen;yPosition=seed.nextInt(yScreen-96)+96;//setthemainframeaddMouseListener(mouse);addKeyListener(key);setCursor(Cursor.CROSSHAIR_CURSOR);setTitle("MovedWord");setUndecorated(true);setSize(xScreen,yScreen);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);}publicvoidupdate(Graphicsg){Imageimg=createImage(xScreen,yScreen);Graphicsg2=img.getGraphics();paint(g2);g2.dispose();g.drawImage(img,0,0,null);}//paintmethodtosetthesrceenpublicvoidpaint(Graphicsg){super.paint(g);g.setColor(Color.RED);g.setFont(stringFont);g.drawString(screenString,xPosition,yPosition);}//filltherunmethodoftheinterfacerunnablepublicvoidrun(){while(true){try{Thread.sleep(sleepTime);}catch(InterruptedExceptione){}xPosition-=subLength;if(xPosition<=-96*screenString.length()){xPosition=xScreen;yPosition=seed.nextInt(yScreen-96)+96;}repaint();}}//mainmethodoftheprogrampublicstaticvoidmain(String[]args){MovedWordmovedWord=newMovedWord();newThread(movedWord).start();}//pressanythingtoendtheprogramprivateclassMouseHandlerimplementsMouseListener{publicvoidmouseClicked(MouseEvente){System.exit(0);}publicvoidmousePressed(MouseEvente){System.exit(0);}publicvoidmouseReleased(MouseEvente){System.exit(0);}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}}privateclassKeyHandlerimplementsKeyListener{publicvoidkeyPressed(KeyEvente){System.exit(0);}publicvoidkeyReleased(KeyEvente){System.exit(0);}publicvoidkeyTyped(KeyEvente){System.exit(0);}}}

解决方案

本帖最后由 chenxhcc 于 2009-10-29 09:54:29 编辑
解决方案二:
为了您的问题能得到及时并更好的答案。关于java技术问题可以发帖到java版块里。这里是使用博客遇到问题的客服处理版块。所以为您解答的人会相对少些。呵~
解决方案三:
引用1楼chenxhcc的回复:

为了您的问题能得到及时并更好的答案。关于java技术问题可以发帖到java版块里。这里是使用博客遇到问题的客服处理版块。所以为您解答的人会相对少些。呵~

谢谢提醒,头次发帖。。没注意。。
解决方案四:
直接转过去不就好了。。。

时间: 2024-08-18 23:37:29

大家来看看我的双缓冲对不对。。。 【已回复】的相关文章

JAVA中的双缓冲问题

/** *//** *双缓冲 *什么是重量级,轻量级 *轻量级在这里指用纯java实现的.重量级指和其他语言混合编程,这样耗用的资源多系统触发的绘画操作 *绘画操作的分类 *系统触发的和程序触发的绘画操作 *AWT的绘制与界面更新使用了一个单独的线程,称为AWT线程.这个线程可以在两种情形下更新显示. *一种情况是界面"显露",这可能会发生在界面首次显示时,或者界面某一部分由于被其它窗口遮盖后重新显示时.界面显露的处理是AWT自动进行的,. *第二种情况是程序在显示内容有所改变时进行界

BitBlt()双缓冲解决图象闪烁

显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题.而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案. MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序. 我想就我长期(呵呵当然也只有2年多)使用MFC绘图的经验谈谈我的一些观点. 1.显示的图形为什么会闪烁? 我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏幕显示时是由OnPaint进行调用的.当窗口由于任何

MFC小游戏,使用双缓冲技术但是有些位图无法释放,导致GDI泄露

问题描述 MFC小游戏,使用双缓冲技术但是有些位图无法释放,导致GDI泄露 用MFC写了一个类似于魔塔的小游戏,但是发现会产生GDI泄露,运行一段时间就会崩掉,但是有些位图文件不能通过deleteObject释放,自己搞不太明白,请教一下各位. 解决方案 hero等对象应该是成员变量吧.从代码来看,hero中的picture载入的图片是固定的,那么完全没有必要在OnPaint函数中进行重复调用,完全是浪费,应该将这些代码放到hero对象初始化的地方,一次性完成就可以了. 另外,cDC指针最好也R

生产者/消费者 双缓冲/多线程 困扰了好几天的问题?

问题描述 问题描述:C#编写的应用,需要从采集设备读取大容量数据→然后进行数据处理限制如下:1.数据采集可能需要较长时间,数据处理也需要较长时间→因此如果等采集完毕才进行处理,处理完毕再进行采集,效率就不够高:为此,我拟采用双缓冲方式:即有两个采集缓冲区A/B,当A采集满后立即采用异步方式进行数据处理,并紧接着用缓冲区B进行数据采集,采集完毕同样采用异步方式进行数据处理:2.在"数据处理"时必须确保只有一个"数据处理"过程被启用.(如果用生产者/消费者来描述的话应该

双缓冲绘图和窗口控件的绘制——ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 .

双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误   cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后希望在这个窗口中绘制我们的图像.图形等数据,然而ATL向导生成的代码中包含很多错误,下面是其自动向导生成的代码:     HRESULT OnDraw(ATL_DRAWINFO& di)    {        RECT& rc = *(RECT*)di.prcBounds;       

c++- 我用VS2010的GDI+写了双缓冲为什么还是画面抖动?

问题描述 我用VS2010的GDI+写了双缓冲为什么还是画面抖动? public: Graphics *gg; Graphics g=dc.GetSafeHdc(); gg->DrawImage(bk,0,0); gg->DrawImage(zj,x,y,0+frame*100,0,100,120,UnitPixel); g.DrawImage(&bb,0,0); 解决方案 Graphics g=dc.GetSafeHdc();此处的dc是兼容dc吗?若不是,建议使用兼容dc. 解决方

C#绘图双缓冲技术总结

GDI+的双缓冲问题终于搞定了, 真是松了一口气!一直以来的误区:.net1.1 和 .net 2.0 在处理控件双缓冲上是有区别的..net 1.1 中,使用:this.SetStyle(ControlStyles.DoubleBuffer, true); .net 2.0中,使用:this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);怪不说老是提示参数无效,一直也不知道是这个问题,呵呵 要知道,图元无闪烁的实现和图元的绘制方法没有多

关于j2me game双缓冲实现探讨

双缓冲技术的应用很广泛,设计游戏的时候更是需要它. 在midp1.0中,api中并没有game这个包,看到网上很多人在讨论设计游戏的时候会出现图片断裂,屏幕闪烁等问题. 我经过这几天的学习整理下自己的学习心得,用来抛砖,希望对此有研究高手们相互讨论.让我也学习学习. 双缓冲的原理可以这样形象的理解:把电脑屏幕看作一块黑板.首先我们在内存环境中建立一个"虚拟"的黑板,然后在这块黑板上绘制复杂的图形,等图形全部绘制完毕的时候,再一次性的把内存中绘制好的图形"拷贝"到另一

VC6下的GDI+双缓冲

一.概述 这段时间在研究GDI+双缓冲的实现方法,在网上花了很多时间都没有找到合适的示例,特别是针对VC6的.后来通过对网上资料的分析,和对SDK/MFC的学习,实现了VC6下的GDI+双缓冲,把它写出来与大家分享,希望可以找到更好的实现方法. GDI+的一个优点就是可以直接使用jpg图像,在这个示例中,我没有把图像文件放在资源中,而是动态读取,一是由于项目需求,图像数目是未知的:二是由于动态读文件效率低下,使用双缓冲更能体现出优势. 二.分析 在实现过程中,犯了一个错误,把读图像的方法放在了O