Java动画短片当不移动鼠标光标时
发布时间:2020-12-14 16:22:38 所属栏目: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中的数组初始化
- java – Spring数据休息使用ManyToMany关系POST一个新项目
- Spring boot + LayIM + t-io 实现文件上传、 监听用户状态的
- java – 使用MatOfKeyPoint和feature2d检测的Android OpenC
- java – 如何在foreach方法中从流中删除对象?
- java – 如何从集合中返回多个元素?
- java – 如何获取paint / paintComponent生成的图像?
- java – URL可以使用浏览器访问,但是仍然是具有URLConnecti
- Spring Boot jpa Service层代码实例
- ToastUtils 对系统Toast的封装