我想在使用 JFC/Swing 工具包的应用程序中使用动画 GIF 图像。我对这个工具包感到困惑

Posted

技术标签:

【中文标题】我想在使用 JFC/Swing 工具包的应用程序中使用动画 GIF 图像。我对这个工具包感到困惑【英文标题】:I want to use animated GIF images the application using JFC/Swing tookkit. I am confused about this toolkit 【发布时间】:2017-07-06 00:07:20 【问题描述】:

我只是将动画 GIF 图像加载为ImageIcon。 我在 Window 2000 PC 上运行的 Swing 程序的图像 请注意,我使用的是 Java/JDK 1.4.x 版本。

这是代码,但它不起作用:

/**
  * DevDaily.com
* A sample program showing how to use an animated gif image
  * in a Java Swing application.
  */
package giftest;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
public class MainFrame extends JFrame 
    JPanel contentPane;
    JLabel imageLabel = new JLabel();
    JLabel headerLabel = new JLabel();

    public MainFrame() 
        try 
setDefaultCloseOperation(EXIT_ON_CLOSE);
            contentPane = (JPanel) getContentPane();
            contentPane.setLayout(new BorderLayout());
            setSize(new Dimension(400, 300));
            setTitle("Your Job Crashed!");
            // add the header label
            headerLabel.setFont(new java.awt.Font("Comic Sans MS", Font.BOLD, 16));
            headerLabel.setText("   Your job crashed during the save process!");
            contentPane.add(headerLabel, java.awt.BorderLayout.NORTH);
            // add the image label
            ImageIcon ii = new ImageIcon(this.getClass().getResource(
                    "snoopy_dancing.gif"));            imageLabel.setIcon(ii);
            contentPane.add(imageLabel, java.awt.BorderLayout.CENTER);
            // show it
            this.setLocationRelativeTo(null);

            this.setVisible(true)
         catch (Exception exception) 
            exception.printStackTrace();
        

    public static void main(String[] args) 
        new MainFrame();
    

【问题讨论】:

"我正在使用 Java/JDK 1.4.x 版本" - 什么...你知道 Java 8 已经发布了吗?请立即升级。 this 旧的 Java 版本不再受支持,容易出现安全漏洞。 1) 由于缺少;,该代码无法编译。 2) 使用逻辑一致的缩进代码行和块的形式。缩进是为了让代码流更容易理解! 3) “但它不起作用” 描述您希望看到的内容,以及您看到的内容。 4) 为了尽快获得更好的帮助,请发布minimal reproducible example 或Short, Self Contained, Correct Example。 5) 例如,获取图像的一种方法是热链接到在this Q&A 中看到的图像。 【参考方案1】:

此代码(在功能上与上面看到的代码等效)适用于使用 Java 1.8 的 Windows 10。

检查它是否在您的机器上按预期运行。如果是这样,snoopy_dancing.gif 似乎不在代码预期的位置。

import java.awt.*;
import java.net.URL;
import javax.swing.*;

public class MainFrame extends JFrame 

    JPanel contentPane;
    JLabel imageLabel = new JLabel();
    JLabel headerLabel = new JLabel();

    public MainFrame() 
        try 
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            contentPane = (JPanel) getContentPane();
            contentPane.setLayout(new BorderLayout());
            setSize(new Dimension(400, 300));
            setTitle("Your Job Crashed!");
            // add the header label
            headerLabel.setFont(new Font("Comic Sans MS", Font.BOLD, 16));
            headerLabel.setText("Your job crashed during the save process!");
            contentPane.add(headerLabel, BorderLayout.NORTH);
            // add the image label
            ImageIcon ii = new ImageIcon(
                    // this.getClass().getResource("snoopy_dancing.gif")); 
                    new URL("https://i.stack.imgur.com/OtTIY.gif"));
            imageLabel.setIcon(ii);
            contentPane.add(imageLabel, BorderLayout.CENTER);
            // show it
            this.setLocationRelativeTo(null);

            this.setVisible(true);
         catch (Exception exception) 
            exception.printStackTrace();
        
    

    public static void main(String[] args) 
        new MainFrame();
    

【讨论】:

我似乎找不到您对原始代码所做的更改以使其正常工作(除了适当的缩进;))。 OP:“我似乎无法找到您对原始代码所做的更改以使其工作” 我:“此代码(即 功能等同于上面看到的代码)” OP:“让它工作”我:“检查它在你的机器上运行是否符合你的预期。如果因此,似乎 snoopy_dancing.gif 不在代码预期的位置。” 所以尝试将 // this.getClass().getResource("snoopy_dancing.gif")); (在代码中注释)更改为this.getClass().getResource("snoopy_dancing.gif"));(bcm 活动代码),删除从已知位置加载 GIF 的 next 行,并报告发生了什么。 @Matthieu 您是否遇到了类似(加载和显示动画 GIF)示例的问题? 不,我只是在浏览 GIF 动画并得到了你的答案。由于您在 Swing 中很有参考价值,因此我试图了解可能出了什么问题:) @Matthieu 是的,我很……有些东西,虽然不确定它是“Swing 中的参考”。 ?

以上是关于我想在使用 JFC/Swing 工具包的应用程序中使用动画 GIF 图像。我对这个工具包感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

我想在每个星期三早上7点BST在Jenkin工具上工作

我想在不直接使用 JavaScript 的情况下制作“Web 2.0”应用程序

英特尔 PIN 工具:获取 EFLAGS 值的踪迹

在片段的工具栏中向上导航

我想在查看器中用我的自定义工具栏替换 auto-desk forge 工具栏

我想在我的应用程序中使用 SQL | Alamofire,斯威夫特[关闭]