在Java Applet中加载和显示本地映像

时间:2014-07-26 08:44:55

标签: java image file applet embedded-resource

当我将程序作为Java Application运行时,一切正常。但是,当我将程序作为Java Applet运行时,图像不会加载,我得到了这个堆栈跟踪:

javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(Unknown Source)
at com.asgoodasthis.squares.Tile.<init>(Tile.java:42)
at com.asgoodasthis.squares.Component.start(Component.java:80)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

我的项目目录中有一个名为res的目录,我正在加载我的图像:

public static BufferedImage tileset_terrain;

public loadImage() {
    try {
        //loading our images
        tileset_terrain = ImageIO.read(new File("res/tileset_terrain.png"));
    } catch(IOException e1) {
        e1.printStackTrace();
    }
}

那么当我将程序作为applet运行时,如何才能加载图像?我正在使用Eclipse IDE。

3 个答案:

答案 0 :(得分:2)

可能无法从当前上下文访问图像,请记住,applet通常在非常严格的安全沙箱中运行,这会阻止它们访问本地/客户端文件系统上的文件。

您需要从加载小程序的服务器加载图像(使用getDocument/CodeBase或相对URL),或者根据您的示例加载图像作为嵌入资源,例如

tileset_terrain = ImageIO.read(getClass().getResource("/res/tileset_terrain.png"));

这假设图像包含在/res目录下的Jar文件中。

如果图像位于加载小程序的服务器上,您也可以使用

try {
    URL url = new URL(getCodeBase(), "res/tileset_terrain.png");
    img = ImageIO.read(url);
} catch (IOException e) {
    e.printStackTrace();
}

请查看Reading/Loading imagesWhat Applets Can and Cannot Do了解详情。

答案 1 :(得分:0)

由于它是一个Applet并且在浏览器中运行,因此您必须使用Applet#getCodeBase()Applet#getDocumentBase

Image image = getImage(getDocumentBase(), "tileset_terrain.png");

查找更多样本HereHere

答案 2 :(得分:-1)

您正在使用的代码可能会导致许多异常。

Image  = getImage(getCodeBase(), "res/tileset_terrain.png");//can beused in your code

您可以尝试使用此代码。

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


public class DisplayImage extends Applet {  

  Image picture;  

  public void init() {  
    picture = getImage(getDocumentBase(),"res/tileset_terrain.png");  
  }  

  public void paint(Graphics g) {  
    g.drawImage(picture, 30,30, this);  
  }  

  }