在Java Applet中加载图像

时间:2009-11-19 12:46:15

标签: java applet

当我尝试在applet viewer中运行applet时,它无法找到资源(Image)。 我尝试加载这样的资源:

String cb= this.getCodeBase().toString();
String imgPath = cb+"com/blah/Images/a.png";
System.out.println("imgPath:"+imgPath);
java.net.URL imgURL = Applet.class.getResource(path);

但是当我在appet viewer路径中运行它时是这样的: imgPath:文件:d:/Work/app/build/classes/com/blah/Images/a.png

虽然图像在这条路上, 是前缀文件:导致问题,我该如何测试这段代码?

在服务器中部署此代码时,代码库是否会返回服务器URL?

4 个答案:

答案 0 :(得分:4)

您的小程序是否应该在加载后加载图像?或者,您最好使用applet将更好的图像资源捆绑在jar中吗?

我每天都在基于applet的应用程序上工作,GUI中有大量图形。 它们捆绑在jar文件中。 这就是我们所做的:

// get the class of an object instance - any object.  
// We just defined an empty one, and did everything as static.
class EmptyClass{}
Class loadClass = new EmptyClass().getClass();
// load the image and put it directly into an ImageIcon if it suits you
ImageIcon ii = new ImageIcon(loadClass.getResource("/com/blah/Images/a.png"));
// and add the ImageIcon to your JComponent or JPanel in a JLabel
aComponent.add(new JLabel(ii)); 

确保您的图像确实位于您认为的罐子里。 使用:

jar -tf <archive_file_name>

...获取商家信息。

答案 1 :(得分:0)

只需使用/com/blah/Images/a.png作为路径即可。 getResource()很聪明,可以找到它。

答案 2 :(得分:0)

上下文类加载器应该与jar一起使用。

ClassLoader cl = Thread.getContextClassLoader();
ImageIcon icon = new ImageIcon(cl.getResource("something.png"), "description");

答案 3 :(得分:-2)

尝试使用此代码时,我只使用了两种方法来加载图像,但在使用applet时它可以正常加载。

private URL getURL(String filename) {
    URL url = null;
    try 
    {
        url = this.getClass().getResource("" + extention + filename); //extention isn't needed if you are loading from the jar file normally. but I have it for loading from files deeper within my jar file like say. gameAssets/Images/ 
    }
    //catch (MalformedURLException e) { e.printStackTrace(); }
    catch (Exception e) { }

    return url;
}

//在这种情况下,observerwin将是一个applet。简单地让班级有这样的东西:Applet observerwin

public void load(String filename) {

    Toolkit tk = Toolkit.getDefaultToolkit();
    image = tk.getImage(getURL(filename));
    while(getImage().getWidth(observerwin) <= 0){loaded = false;}
    double x = observerwin.getSize().width/2  - width()/2;
    double y = observerwin.getSize().height/2 - height()/2;
    at = AffineTransform.getTranslateInstance(x, y);
    loaded = true;
}

如果需要,我可以发布我使用的其他课程