问题描述
我是想模拟那个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版块里。这里是使用博客遇到问题的客服处理版块。所以为您解答的人会相对少些。呵~
谢谢提醒,头次发帖。。没注意。。
解决方案四:
直接转过去不就好了。。。