学习java ...为什么这个图像会闪烁/闪烁?

时间:2013-05-22 18:12:00

标签: java gif flicker animated

似乎有很多类似的问题,但它们实现了不同的代码......这只是基本代码,所以我有一种感觉,我做的事情非常奇怪/错误。这就是我的代码。如果改变了事情,那么GIF是透明的和动画的。

import java.awt.*;
import javax.swing.*;
public class NewClass extends JFrame {
    private JLabel label;
    private JButton button;
    private JTextField textfield;
    private ImageIcon image;
    private JLabel label1;
    private ImageIcon imaged;
    private JLabel label2;

    public NewClass (){
        setLayout(new FlowLayout());

        label = new JLabel("Hi, I am a label!");
        add(label);
        image = new ImageIcon(getClass().getResource("sprite15_2_1.gif"));
        label1 = new JLabel(image);
        add(label1);
         imaged = new ImageIcon(getClass().getResource("sprite2_1_1.gif"));
        label2 = new JLabel(imaged);
        add(label2);
        label1.setDoubleBuffered(true);
        label2.setDoubleBuffered(true);
        textfield = new JTextField(15);
        add (textfield);

        button = new JButton("aight");
        add(button);
    }
    public static void main (String args[]){

    NewClass gui = new NewClass();
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    gui.pack();
    gui.setVisible(true);
    gui.setTitle("Elan Vital");
    }
}

已修改为包含完整代码。这只是一个简单的程序。

Flashing GIF(sprite15_2_1.gif):

The Flashing GIF

sprite_2_1_1.gif完美显示,但sprite15_2_1.gif的下半部分闪烁白色。我不知道我有什么不同:“。我已经仔细检查了gif,以确保它不是文件本身的问题......

2 个答案:

答案 0 :(得分:0)

尝试启用双缓冲:

label1.setDoubleBuffered(true);
label2.setDoubleBuffered(true);

有关详细信息,请参阅Component.setDoubleBuffered上的javadoc。

答案 1 :(得分:0)

确实存在gif文件的问题。

使用以下任意一张图片而不是您张贴的图片。 <{1}}没有必要。

图片已在photoshop中更正。有一些冗余的帧可能导致闪烁但令人惊讶的事实是图像在所有图像查看器上正确显示但在Java中没有。所以java bug的可能性。

enter image description here

enter image description here

第一张图像速度稍慢,第二张图像慢了0.2秒。使用任何一个。