2

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

谢谢...

这是我的代码:

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);
 }

}
4

3 回答 3

3
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 绘制。

于 2011-09-16T05:49:14.073 回答
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));
于 2011-09-16T05:21:16.867 回答
0

嗯,上面的答案是正确的。这是我用来显示图像的代码。希望能帮助到你:

/*
    <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 文件夹中没有相同的名称。这阻止了我的图像显示。

于 2019-09-09T20:46:22.370 回答