为什么程序没有进入loadImage()方法呢?

Why does the program not enter the loadImage() Method?

这个小程序的目标是加载一个.jpg图像并将其显示在由JPanel扩展的Canvas class中,显示在JFrame object中主要class,像这样:

Main-class

<code>

    package imageloader;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    public class ImageLoader {
        public static void main(String[] args) 
        {
            JFrame frame = new JFrame();
            Canvas c = new Canvas();
            Graphics g  = frame.getGraphics();
            Loader load = new Loader();  
            frame.setSize(500, 500);
            c.setImage(load.loadImage());
            frame.add(c);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }   
    }




</code>
<h1>The Canvas class</h1>


<code>
     package imageloader;
        import java.awt.Graphics;
        import java.awt.image.BufferedImage;
        import javax.swing.JPanel;
        public class Canvas extends JPanel 
        {
            private BufferedImage img = null;
            public Canvas()
            {
                this.setSize(500, 500);
                this.setVisible(true);
            }
            @Override
            public void paint(Graphics g)
            {
                g.drawLine(0, 0, 250, 250); // just to see if the Canvas is painting, and it does!
                g.drawImage(img, 250, 250, null);
                repaint();
            }
            public void setImage(BufferedImage img)
            {
                this.img = img;
            }
        }

</code>
<h1>The Loading class</h1>

<code>

    package imageloader;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    public class Loader 
    {
        public BufferedImage loadImage()
        {
            BufferedImage im = null;
            try 
            {
                File f = new File("player.jpg");
                im = ImageIO.read(f.getAbsoluteFile());
                System.out.println("Loaded!"); // this did not apear in my Output-Console in Netbeans
            }
            catch (IOException e) {}
            return im;
        }
    }

</code>

我的主要问题已经在标题中提出了。首先,我将代码与 Java 文档教程进行了比较,并将 Parent class 从 Canvas.java 更改为 Component,但收效甚微。参考这里:

Link to source

然后我用 Google 找到了这个:

Displaying an image in Swing (on Whosebug)

因为我的 JFrame(或与此相关的组件)确实执行了从 (0|0) 到 (250|250) 的 drawLine() 函数,所以这不是问题所在,但我确实尝试了 paintcomponent()和paintComponents(),第一个画线不画图,速度比较慢,后者根本不画线,所以我又切换回paint()方法

在我的小研究之前,我自己尝试了不同的东西。我将装载机 class 从 Tutorial-Version.

改了一点

完整教程可在此处获取:Link

我同意 John3136,但直接回答:

如果您没有看到 "Loaded!",则表明 try 中的其他两行之一正在抛出异常。如果没有异常信息,很难进一步排除故障。

将 e.printStackTrace() 放在你的 catch 块中,post 如果你仍然遇到困难,请将结果放在这里。

尽管该文件可能与您的源位于同一目录中,但它必须与您的可执行文件位于同一目录中,您的代码才能找到它。检查 f.getAbsolutePath() 的值,看看它是否符合您的预期。