【问题标题】:Applet shows empty in the browser小程序在浏览器中显示为空
【发布时间】:2013-05-29 00:59:49
【问题描述】:

这个小程序假设显示两张图片并排显示。当我在浏览器中运行这个小程序时,它不显示图片。图片名称正确,与小程序位于同一文件夹中。

import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JApplet;


public class question3b extends JApplet{


    public void init() {
        repaint();
        }

     public void paint(Graphics g)
    {
        super.paint(g);
        ImageIcon image1 = new ImageIcon("1.JPG");
        ImageIcon image2 = new ImageIcon("2.JPG");
        g.drawImage(image1.getImage(), 100, 20 , 100, 100, this);
        g.drawImage(image2.getImage(), 100, 150 , 100, 100, this);

  }
}

这是 HTML 页面。

<html>
<head>
<title>Welcome Java Applet</title>
</head>
<body>
<applet
  code = "question3b.class"
  width = 1000
  height = 500>
</applet>
</body>
</html>

【问题讨论】:

    标签: java image swing graphics applet


    【解决方案1】:

    建议:

    • 不要覆盖 JApplet 的绘制方法。
    • 而是重写 JPanel 的 paintComponent 方法并在小程序中显示面板。
    • 不要在paintComponent 方法中调用repaint()。请。
    • 不要在paint 或paintComponent 方法中读入图像。仅读取一次 中的图像。
    • 不要将图像作为文件读取,而是作为资源读取。
    • 进行测试以确保您正在寻找图片的正确位置。
    • 阅读一些关于 Swing 图形的教程会让您受益匪浅,因为您所做的大部分工作看起来像是在做一些猜测。这些教程将向您展示做事的正确方法。您不会后悔阅读它们。
    • 比在 JPanel 中绘制图像更好的方法是将它们放入 ImageIcons 并在 JLabels 中显示。

    【讨论】:

    • 以及如何覆盖JPanel的paintComponent方法,我会尝试搜索教程
    • @BasilBasaif:每次调用paint(...) 时,您都在读取图像。这不仅是不必要的,而且会减慢 GUI 的图形速度。 paint 和paintComponent 需要精简、平均且快速,并且参与绘画。
    • @BasilBasaif 阅读Performng custom painting
    • 添加使用 ImageIO 而不是 ImageIcon (请;))
    【解决方案2】:

    您遇到的问题与您加载图像的方式有关

    ImageIcon image2 = new ImageIcon("2.JPG");
    

    假设图像源是客户端硬盘上的本地文件,这可能是非法操作。

    答案取决于文件的存储位置。如果图像是应用程序 jar 中的嵌入式资源,则应该使用

    ImageIcon image2 = new ImageIcon(getClass().getResource("/2.JPG"));
    

    如果图像存储在网络服务器中,那么您应该使用

    try {
        URL url = new URL(getCodeBase(), "2.jpg");
        img = ImageIO.read(url);
    } catch (IOException e) { 
        e.printStackTrace();
    }
    

    并插入气垫船刚才所说的一切 (+1)

    【讨论】:

    • 它工作得很好,因为我使用 wamp 来测试我的页面,但我没有使用你给我的 try and catch 代码,顺便说一句,当我测试它时它显示得很好网豆。
    • 小程序查看器没有浏览器一样的限制,所以可以看到文件系统。 ImageIO 更健壮(并且支持更多的图像格式),因为它会抛出一个异常,这意味着它更容易诊断
    猜你喜欢
    • 2013-12-13
    • 2011-09-30
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多