【问题标题】:Image not showing in java applet图像未显示在 java 小程序中
【发布时间】:2012-03-23 11:23:43
【问题描述】:

在你说这个问题已经被问到之前,我知道并且我已经在这里阅读了 4 或 5 个相同的问题,但没有任何帮助。

我尝试过使用 getdocumnetbase、getcodebase、缓冲图像与图像相比,以及到目前为止我遇到的所有内容。对我的情况没有任何帮助。

我的问题是,当我运行小程序时,图像没有显示。我在小程序中添加了一个按钮以查看它是否显示,但实际上它不会显示,除非我将鼠标悬停在它上面或重新调整窗口大小。

appelt 现在唯一要做的就是显示图像和按钮,但它不起作用。所以我迷路了。

代码如下:

public void init() {

    JPanel panel = new JPanel()
    {
        public void paintComponent(Graphics g)  
        {
            BufferedImage img = null;
            try {
                img = ImageIO.read(new File("..\\gifs\\Assembled.jpg"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("inside JPanel");
            g.drawImage(img, 0, 0, this);

            super.paintComponent(g); 
        }
    };  

    JButton j = new JButton("hi");
    panel.add(j);
    add(panel);

addMouseListener(this);
repaint();
}

谢谢。

现在你已经投了反对票(并且没有帮助我)让我们看看是否有人可以真正提供帮助。

公共无效初始化(){

    JPanel panel = new JPanel(){

    public void paintComponent(Graphics g)  
    {
         Image i = null;
        try {
            i = getImage(new URL(getCodeBase(), "../gifs/Assembled.jpg"));
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("inside JPanel");
        g.drawImage(i, 0, 0, this);

        //super.paintComponent(g); 
    }
    };



    this.setLayout(new BorderLayout());
    panel.setSize(500,500);
    add(panel, BorderLayout.CENTER); 
    addMouseListener(this);
    //repaint();
}

我编辑了代码,但仍然没有任何效果。图像找到并加载得很好,但除非我主动重新调整小程序的大小,否则它不会显示。换句话说,图像仅在调整大小时显示,其他时间不显示。现在是什么原因造成的?哦,它只有在我删除对 supper.paintComponent(g); 的调用时才会显示。

哦,你的链接并没有帮助我看到我在发布之前是如何尝试答案的。

【问题讨论】:

  • “我知道并且已经阅读了 4 或 5 个相同的问题” 哪 4 个或 5 个?我的意思是链接。在过去的 72 小时内,我必须至少回答过两次这个问题。
  • “我在小程序中添加了一个按钮以查看它是否显示,但实际上它不会显示,除非我将鼠标悬停在它上面或重新调整窗口大小。” 哦,对了,另一个不同的问题。将repaint(); 替换为validate();
  • “我喜欢你在之后投票否决这个问题……” 垃圾!只是为了证明这一点-在这里,让我投反对票。祝你好运。您刚刚失去了小程序排名第一的回答者的帮助。
  • 在这个论坛和其他论坛上已经多次询问并回答了同样的问题,即无法正确找到小程序的图像文件。除了您还尝试从 paintComponent 方法中读取图像之外,您的方法没有什么不同,这是永远不应该做的事情。

标签: java swing applet


【解决方案1】:

Applet 由网络服务器提供服务。下载 Applet 代码并运行它的是网络浏览器。因此,Applets 在物理上与网络浏览器运行在同一台机器上。

下面一行

img = ImageIO.read(new File("..\\gifs\\Assembled.jpg"));

预计文件存在于运行 webbrowser 的机器的本地磁盘文件系统中,相对于 webbrowser 执行的 JVM 的工作目录。它指向网络服务器中的文件,也不指向打包在 Applet 的 JAR 文件中的文件(如果有)。您当然不会期望最终用户在其本地磁盘文件系统中已经准备好特定的图像文件。

根据文件实际的位置,您需要更改该部分。

如果它实际存储在网络服务器中,相对于下载小程序的 URL(即其 代码库),那么您需要改为通过 URL 获取文件。

img = ImageIO.read(new URL(getCodeBase(), "gifs/Assembled.jpg"));

假设小程序由http://example.com/contextname/applet.jar 提供服务,那么上面的示例假设图像由http://example.com/contextname/gifs/Assembled.jpg 提供。

或者,如果它实际上是打包在 Applet JAR 文件中,那么您需要改为通过类路径获取该文件。假设你已经将它存储在Applet JAR文件的/META-INF/gifs/Assembled.jpg,那么你需要通过classpath获取它,如下所示:

img = ImageIO.read(getClass().getResourceAsStream("/META-INF/gifs/Assembled.jpg"));

顺便说一下,JPG 文件不是 GIF 文件。我建议将“gifs”重命名为“images”或其他名称。

【讨论】:

    猜你喜欢
    • 2014-07-02
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多