我想在使用 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 图像。我对这个工具包感到困惑的主要内容,如果未能解决你的问题,请参考以下文章
我想在不直接使用 JavaScript 的情况下制作“Web 2.0”应用程序