Java动画短片当不移动鼠标光标时
发布时间:2020-09-16 10:41:10 所属栏目:Java 来源:互联网
导读:我有一个非常简单的动画,一个大字体的文字不断(逐个像素)移动到左边.首先将文本转换为图像,然后启动定时器任务,重复(每10-20 ms)将图像的x坐标递减1,并进行重绘(). 这个程序在某些系统上显示出一个奇怪的行为.在带有nVidia卡的电脑上,它运行顺利.在我的Vaio笔
|
我有一个非常简单的动画,一个大字体的文字不断(逐个像素)移动到左边.首先将文本转换为图像,然后启动定时器任务,重复(每10-20 ms)将图像的x坐标递减1,并进行重绘(). 这个程序在某些系统上显示出一个奇怪的行为.在带有nVidia卡的电脑上,它运行顺利.在我的Vaio笔记本上,在一个BeagleBoneBlack和一个朋友的Mac上,它沉重地放下.看起来暂停一段时间,然后向左移动约10个像素,再次暂停等等. 什么困扰我的事实是,在这些系统上,如果您没有触摸鼠标,动画只会停留.只要您将鼠标光标移动到窗口内,无论多么缓慢,或者拖动窗口本身,动画运行顺利! 有人可以解释一下吗这是程序: import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
class Textimg extends JComponent
{
String str;
Font font;
int x = 0;
final int ytext = 136;
Image img;
public Textimg(String s)
{
str = s;
font = new Font("Noserif",Font.PLAIN,96);
setLayout(null);
}
protected void paintComponent(Graphics g)
{
if (img == null)
{
img = createImage(4800,272);
Graphics gr = img.getGraphics();
gr.setFont(font);
gr.setColor(Color.BLACK);
gr.fillRect(0,4800,272);
gr.setColor(new Color(135,175,0));
gr.drawString(str,ytext);
gr.dispose();
}
g.drawImage(img,x,this);
}
public void addX(int dif)
{
if (isVisible())
{
x = x + dif;
Graphics g = getGraphics();
if (g != null) paintComponent(g);
}
}
}
public class Banner extends JFrame
{
StringBuffer buf;
int sleeptime = 10;
Banner(String path) throws IOException
{
setSize(new Dimension(480,272));
setTitle("Java Test");
setDefaultCloSEOperation(EXIT_ON_CLOSE);
setLayout(null);
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(path),"UTF-8"));
buf = new StringBuffer();
while (true)
{
String line = reader.readLine();
if (line == null) break;
buf.append(line);
}
final Textimg textimg = new Textimg(buf.toString());
add(textimg);
textimg.setBounds(0,480,272);
final javax.swing.Timer timer = new javax.swing.Timer(200,new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
textimg.addX(-1);
}
});
timer.setDelay(sleeptime);
timer.start();
}
//----------------------------------------------------------------------
public static void main(String[] args) throws Exception
{
new Banner(args[0]).setVisible(true);
}
}
解决方法完成绘图后,尝试调用此方法:Toolkit.getDefaultToolkit().sync(); 这会刷新一些像Linux这样的系统的图形缓冲区.参见Javadoc:http://docs.oracle.com/javase/7/docs/api/java/awt/Toolkit.html#sync() (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java实现的MD5摘要算法完整实例
- Mybatis中SqlMapper配置的扩展与应用详细介绍(1)
- 解决出现 java.lang.ExceptionInInitializerError错误问题
- java – 如何从VolleyError获取响应代码?
- Java创建对象的几种方法
- Java基本数据类型与封装类型详解(int和Integer区别)
- java – EJB容器是否驻留在所有应用程序服务器中. EJB容器深
- java – DBCP和Hibernate在Spring上,不会重新打开死连接,为
- java – 如何在返回多种类型的XML的URL上使用Spring RestTe
- 理解java多线程中ExecutorService使用
