有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

gif学习java。。。这个图像究竟为什么会闪烁?

似乎有很多类似的问题,但它们实现了不同的代码。。。这只是基本代码,所以我感觉我在做一些非常奇怪/错误的事情。这就是我的代码的样子。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");
    }
}

编辑为包含完整代码。这只是一个简单的程序

闪烁的GIF(sprite15_2_1.GIF):

The Flashing GIF

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


共 (2) 个答案

  1. # 1 楼答案

    尝试启用双缓冲:

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

    有关更多信息,请参阅Component.setDoubleBuffered上的javadoc

  2. # 2 楼答案

    gif文件确实存在问题

    请使用以下图片中的任意一个,而不是您发布的图片Double buffering不是必需的

    该图像已在photoshop中更正。有一些冗余帧可能导致了闪烁,但令人惊讶的是,图像在所有图像查看器上都能正确显示,而不是在Java中。所以有可能出现java错误

    enter image description here

    enter image description here

    第一个图像快一点,第二个图像慢0.2秒。使用任何一个