【问题标题】:NullPointerException JApplet with getClass().getResourceNullPointerException JApplet with getClass().getResource
【发布时间】:2012-04-12 05:18:41
【问题描述】:

我想在 JApplet 中向 JPanel 添加一个图像(这样我就可以创建 jar 文件),所以我使用了:

Image x = Toolkit.getDefaultToolkit().getImage(
  getClass().getResource("D:/THANH_TAI LIEU/niet/hinhtu.jpg"));

但是发生了 java.lang.NullPointerException。我确定图像路径是正确的,因为我使用时小程序运行良好:

Image image = ImageIO.read(new File("D:/THANH_TAI LIEU/niet/hinhtu.jpg"));

例外情况:

    Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at sun.awt.SunToolkit.getImageFromHash(SunToolkit.java:830)
at sun.awt.SunToolkit.getImage(SunToolkit.java:887)
at applet$CustomPanel.paintComponent(applet.java:65)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:567)

代码:

  import java.awt.BorderLayout;
  import java.awt.Color;
  import java.awt.Graphics;
  import java.awt.Image;
  import java.awt.Toolkit;
  import java.io.File;
  import java.io.IOException;

  import javax.imageio.ImageIO;
  import javax.swing.BorderFactory;
  import javax.swing.ImageIcon;
  import javax.swing.JApplet;
  import javax.swing.JButton;
  import javax.swing.JLabel;
  import javax.swing.JPanel;

  public class applet extends JApplet {
  public void init() {
    //Execute a job on the event-dispatching thread:
    //creating this applet's GUI.
    try {
        javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                createGUI();
            }
        });
    } catch (Exception e) {

        e.printStackTrace();
    }
}

  private void createGUI() {
    JPanel panel = new JPanel(new BorderLayout());
    JButton button = new JButton("CLICK ME");
    panel.add(button, BorderLayout.SOUTH);
    panel.add(new CustomPanel(), BorderLayout.CENTER);

    add(panel);
    }

public class CustomPanel extends JPanel{

    public void paintComponent(Graphics g) {

        Image image = null;
        try {
            image = ImageIO.read(new File("D:/THANH_TAI LIEU/niet/hinhtu.jpg"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Image x = Toolkit.getDefaultToolkit().getImage(getClass().getResource("D:/THANH_TAI LIEU/niet/hinhtu.jpg"));
        g.drawImage(x, 0, 0, null); 

    }   



}
}

可能是什么问题?

【问题讨论】:

  • 我猜getClass().getResource(...) 需要相对于您的类文件的相对路径。因此,取决于您需要指定的图像所在的位置。你的Toolkit 怎么会知道Drive D 在哪里。检查此链接以获得更多帮助:How to add images.
  • 是的,问题解决了。我将图片与类文件放在同一路径中,然后 getResource("/hinhtu.jpg")); - 成功了!!
  • 那段代码还是有一些问题,即使找到了资源。 1) 尝试在paintComponent() 中加载 2 个图像 - 永远不要在该方法中加载资源。 2) 使用null 作为绘图的ImageObserver,当thisJPanel是一个ImageObserver。 -- 是否打算在CustomPanel 之上添加任何组件,或者在其上绘制任何其他内容?如果没有,只需将图像放在标签中并将其添加到父面板的 CENTER 即可。

标签: java swing nullpointerexception japplet


【解决方案1】:

getClass().getResource()
仅适用于项目的类路径。
您需要将图像文件放在类路径上才能找到
ImageIO.read() 可以读取参数中传递的任何内容作为输入流。

【讨论】:

    猜你喜欢
    • 2013-01-13
    • 2012-06-19
    • 2014-04-05
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2014-12-07
    • 2016-05-27
    相关资源
    最近更新 更多