当我尝试在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?
答案 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;
}
如果需要,我可以发布我使用的其他课程