【问题标题】:java.lang.NullPointerException when trying to display a ,gif file?尝试显示 .gif 文件时出现 java.lang.NullPointerException?
【发布时间】:2015-02-26 23:57:50
【问题描述】:

好吧,基本上我尝试使用 url 显示 .gif,但它给了我一个空指针异常,我不确定为什么,因为我的 url 是正确的并且我的代码没有其他问题(至少我没有可以看到)。

   import javax.swing.*;
   import java.net.*;
public class image {

public image() {

}

public static void main(String[] args) {


    URL url = image.class.getResource("<http://cdn.osxdaily.com/wp-content/uploads/2013/07/dancing-banana.gif>");
    ImageIcon imageIcon = new ImageIcon(url);
    JLabel label = new JLabel(imageIcon);
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    panel.add(label);
    frame.add(panel);
    frame.setTitle("Title");  
    frame.setSize(700,500);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);


         }

    }

【问题讨论】:

    标签: java swing nullpointerexception


    【解决方案1】:
    URL url = image.class.getResource("<http://cdn.osxdaily.com/wp-content/uploads/2013/07/dancing-banana.gif>");
    

    不是您从网络资源中引用图像的方式。您将使用此方法加载嵌入在应用程序中的资源(在应用程序类路径的上下文中)

    URL url = new URL("http://cdn.osxdaily.com/wp-content/uploads/2013/07/dancing-banana.gif");
    

    可能会更好......

    请记住,下载和加载图像可能需要一些时间,您可能希望使用MediaTracker 来跟踪进度,这将允许您向用户提供反馈并知道何时使用图像更新屏幕例如,一旦可用。

    在任何人问之前,我选择不使用ImageIO 来加载动画gif,因为这只是更多的工作(如demonstrated here - 不适合胆小的人)。在这种情况下,MediaTracker 可用于检查错误

    【讨论】:

    • +1 有趣...我认为ImageIcon imageIcon = new ImageIcon(url) 会阻塞,直到数据被重新保存和处理。
    • @DimaMaligin 不,这实际上是这个类的问题之一(以及为什么我更喜欢ImageIO),但话虽如此,当我们过去有 14.4k和 28.8k 调制解调器!哦,喜悦。因此,它们被设计为将图像的物理加载卸载到后台并允许代码继续运行。这就是为什么我们有像MediaTrackerImageObserver 这样的东西,它们提供有关图像加载进度的信息。我不是ImageIcon这种方式的粉丝,因为它可以静默失败,因此额外需要MediaTracker
    • @MadProgrammer 还有哪些其他对象可以加载 .gif、png 或任何比 ImageIO 更快的一般图像?
    • 我从不使用ImageIcon,我通常使用BufferedImage bi = ImageIO.read(whateva);,您能确认一下这样做的安全性吗?
    • 这并不是说ImageIconImageIO 快,他们只是做不同的工作。我更喜欢ImageIO,因为它可以加载更广泛的图像,直到图像被实现或发生错误时才会返回,它更易于管理。但是,ImageIcon 是加载动画gif 的最简单方法,因为您不需要自己尝试和管理帧。就个人而言,我更喜欢ImageIO
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    相关资源
    最近更新 更多