【问题标题】:How can I display an image in the Applet?如何在 Applet 中显示图像?
【发布时间】:2011-09-16 05:01:31
【问题描述】:

我有一个图像,我想在小程序中显示它,问题是图像无法显示。我的代码有问题吗?

谢谢...

这是我的代码:

import java.applet.Applet;
import java.awt.*;


 public class LastAirBender extends Applet
 {

 Image aang;

 public void init()
 {

  aang = getImage(getDocumentBase(), getParameter("images.jpg"));
 }

 public void paint(Graphics g) 
 {

    g.drawImage(aang, 100, 100, this);
 }

}

【问题讨论】:

    标签: java image intellij-idea japplet


    【解决方案1】:
    aang = getImage(getDocumentBase(), getParameter("images.jpg"));
    

    我怀疑你做错了什么,这应该很简单:

    aang = getImage(getDocumentBase(), "images.jpg");
    

    HTML/applet 元素的内容是什么?图像的名称是什么?图片与 HTML 是否在同一目录中?

    更新 1

    第二行(更改后的)代码将尝试将images.jpg 文件加载到与 HTML 相同的目录中。

    当然,您可能需要添加MediaTracker 来跟踪图像的加载,因为Applet.getImage() 方法会立即返回(现在),但会异步加载(稍后)。

    更新 2

    试试这个确切的实验:

    将此来源另存为${path.to.current.code.and.image}/FirstAirBender.java

    /*
    <applet class='FirstAirBender' width=400 height=400>
    </applet>
    */
    import javax.swing.*;
    import java.awt.*;
    import java.net.URL;
    import javax.imageio.ImageIO;
    
    public class FirstAirBender extends JApplet {
    
        Image aang;
    
        public void init() {
            try {
                URL pic = new URL(getDocumentBase(), "images.jpg");
                aang = ImageIO.read(pic);
            } catch(Exception e) {
                // tell us if anything goes wrong!
                e.printStackTrace();
            }
        }
    
        public void paint(Graphics g) {
            super.paint(g);
            if (aang!=null) {
                g.drawImage(aang, 100, 100, this);
            }
        }
    }
    

    然后转到提示并编译代码,然后使用源名称作为参数调用小程序查看器。

    C:\Path>javac FirstAirBender.java
    C:\Path>appletviewer FirstAirBender.java
    C:\Path>
    

    您应该会在小程序中看到您的图像,从左上角以 100x100 绘制。

    【讨论】:

    • 图像的名称只是“图像”。是的,它们在同一个目录中,但我只是想知道,因为你提到了 HTML,我还要使用 HTML 吗?
    • 我只想在 JApplet 中显示图像。
    • 遵循@Andrew Thompson +1 的建议
    • 错误:“javax.imageio.IIOException:无法从 URL 获取输入流!”这是什么意思?
    • 阅读these posts你明白了什么?
    【解决方案2】:

    1) 我们生活在 21 世纪,那么请 JApplet 而不是 Applet

    import java.awt.*;
    import javax.swing.JApplet;
    
    public class LastAirBender extends JApplet {
    
        private static final long serialVersionUID = 1L;
        private Image aang;
    
        @Override
        public void init() {
            aang = getImage(getDocumentBase(), getParameter("images.jpg"));
        }
    
        @Override
        public void paint(Graphics g) {
            g.drawImage(aang, 100, 100, this);
        }
    }
    

    2) Icon/ImageIcon 最好找JLabel

    3) 请问getImage(getDocumentBase(), getParameter("images.jpg"));是什么

    我会等待类似的东西

    URL imageURL = this.getClass().getResource("images.jpg");
    Image image = Toolkit.getDefaultToolkit().createImage(imageURL);
    Image scaled = image.getScaledInstance(100, 150, Image.SCALE_SMOOTH);
    JLabel label = new JLabel(new ImageIcon(scaled));
    

    【讨论】:

    • 我需要用 getDocumentBase() 删除该行吗?
    【解决方案3】:

    嗯,以上答案是正确的。这是我用来显示图像的代码。希望对您有所帮助:

    /*
        <applet code = "DisplayImage.class" width = 500 height = 300>
        </applet>
    */
    
    import java.applet.Applet;
    import java.awt.*;
    
    public class DisplayImage extends Applet
    {
        Image img1;
    
        public void init(){
            img1 = getImage(getCodeBase(),"Nature.jpg" );
        }
    
        public void paint(Graphics g){
            g.drawImage(img1, 0,0,500,300,this);
        }
    
    }
    

    在上面的代码中,我们创建了一个图像类对象并从代码库指定的位置获取图像。然后使用 drawImage 方法绘制图像。有兴趣了解 getCodeBase() 和 getDocumentBase() 方法的价值的人可以在paint方法中添加以下代码。它们实际上是项目文件夹中 src 文件夹的位置:-

        String msg;
        URL url=getDocumentBase();
        msg="Document Base "+url.toString();
        g.drawString(msg,10,20);
    
        url=getCodeBase();
        msg="Code Base "+url.toString();
        g.drawString(msg,10,40);
    

    还有一点需要注意:- 确保图像和类在 src 文件夹中的名称不同。这导致我的图片无法显示。

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      相关资源
      最近更新 更多