- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的游戏,它作为 JApplet 运行。当我在 Eclipse 中测试它时,它运行得很好。但是,当我将其导出为小程序并尝试在浏览器中测试它时,它找不到图像。 jar文件内的文件夹结构如下:
index.html (page that displays the applet)
shipyard.jar
_shipyard
__Shipyard.class (main applet class)
_img
__All of my images, saved as .png files
用于显示小程序的 HTML 代码如下:
<object width="1280" height="720" data="shipyard.jar" type="application/x-java-applet">
<param name="archive" value="shipyard.jar">
<param name="code" value="shipyard.Shipyard">
<param name="align" value="middle">
</object>
我的 init() 和 run() 方法,它们设置预加载队列,然后迭代它以检索和准备图像:
@Override
public void init(){
markImageForPreload("background");
markImageForPreload("shipyard_interior");
markImageForPreload("tooltip");
markImageForPreload("button");
for(String s : ShipyardExterior.tilePages) markImageForPreload("tiles/" + s);
for(ShipSystem sys : ShipSystem.allSystems){
markImageForPreload("system/interior/" + sys.imgName);
if(sys.getForceExterior()) markImageForPreload("system/exterior/" + sys.imgName);
}
for(ShipWeapon wep : ShipWeapon.allWeapons){
markImageForPreload("weapon/" + wep.imgname);
}
currentScreen = new LoadingScreen();
addMouseListener(this);
addKeyListener(this);
}
@Override
public void run() {
preloadCount = 0;
preloadTotal = preloadQueue.size();
for(String s : preloadQueue){
this.prepareImage(getOrLoadImage(s), this);
preloadCount++;
repaint();
}
currentScreen = new ShipyardInterior();
while(true){
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
try {
if(this.getMousePosition() != null){
mouseX = this.getMousePosition().x / 2;
mouseY = this.getMousePosition().y / 2;
}
} catch (NullPointerException e){}
currentScreen.onUpdate();
repaint();
try {
Thread.sleep(1000 / 60);
} catch(InterruptedException e) {}
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
JApplet 类中加载和检索图像的方法:
public static Image getOrLoadImage(String s){
Image img = instance.loadedImages.get(s);
if(img == null){
System.out.println("Loading " + s + ".png.");
try {
img = ImageIO.read(new URL(instance.getCodeBase(), "../img/" + s + ".png"));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(img == null) System.out.println("Image does not exist.");
else instance.loadedImages.put(s, img);
}
return img;
}
“loadedImages”是一个静态 HashMap,通过 URL 存储图像。调用该方法时,它首先检查图像是否已加载。如果是,则返回图像。如果未加载,则会加载它并将其 Image 实例添加到 returnedImages 中。
当我打开页面时,小程序运行,但图像不显示。像drawString()、drawRect()和其他基本渲染方法这样的方法可以工作,但图像不行。
我在互联网上搜寻过,但找不到任何关于该主题的有用信息。一个线程告诉我对小程序 jar 进行自签名,我照做了,但这似乎不起作用。我尝试过各种检索图像的方法(包括 getClass().getClassLoader().getRescource())、设置代码库等,但无济于事。有什么建议吗?
最佳答案
img = ImageIO.read(new URL(instance.getCodeBase(), "../img/" + s + ".png"));
如果我有时间,很高兴听到您关于为什么这适用于所描述的结构的推理。 AFAIU 应该是:
img = ImageIO.read(this.getClass().getResource("/img/" + s + ".png"));
关于java - 如何从 jar 文件中加载图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18564020/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!