- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,这是我的问题,也是我要问你的问题......
我有一个游戏需要从 jar 文件中加载图像(所有图像都像这样打包到 jar 文件中):我首先解压了 jar 文件:
然后它去:
然后在每个文件夹中,我都有如下所示的内容:
现在上面的提醒是解压缩的 Jarfile GameClient.jar,您会看到卡片在其中的位置。
所以这是我尝试将这些图像中的每一个加载到内存中的代码
private void addCardsAndChangeSize() throws IOException
{
String tempString;
ImageIcon tempIcon;
allCards.clear();
ClassLoader cldr = this.getClass().getClassLoader();
URL imageURL;
for(int i = 0; i < all.length; i++)
{
for(int x = 0; x < clubs.length; x++)
{
tempString = all[i][x];
tempString = "/cards/"+cardFolders[i]+"/"+tempString;
imageURL = cldr.getResource(tempString);
tempIcon = resizeImage(new ImageIcon(imageURL),70,70,false);
tempString = all[i][x];
tempIcon.setDescription(tempString);
allCards.add(tempIcon);
}
}
backCard = resizeImage(new ImageIcon(cldr.getResource(back)),70,70,false);
}
所以我在构造函数中调用将所有图像加载到 ArrayList 中,如果您想知道我做了什么,这里是整个类。
package global;
import java.awt.*;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.*;
public class Cards
{
private ImageIcon backCard = new ImageIcon("cards/backCard.jpg");
private String back = "/cards/backCard.jpg";
private String[] cardFolders = {
"clubs","diamonds","hearts","spades"
};
private String[] clubs = {
"aceClubs.jpg","eightClubs.jpg","fiveClubs.jpg","fourClubs.jpg","jackClubs.jpg",
"kingClubs.jpg","nineClubs.jpg","queenClubs.jpg","sevenClubs.jpg","sixClubs.jpg",
"tenClubs.jpg","threeClubs.jpg","twoClubs.jpg"
};
private String[] diamonds = {
"aceDia.jpg","eightDia.jpg","fiveDia.jpg","fourDia.jpg","jackDia.jpg","kingDia.jpg",
"nineDia.jpg","queenDia.jpg","sevenDia.jpg","sixDia.jpg","tenDia.jpg","threeDia.jpg",
"twoDia.jpg"
};
private String[] hearts = {
"aceHearts.jpg","eightHearts.jpg","fiveHearts.jpg","fourHearts.jpg","jackHearts.jpg",
"kingHearts.jpg","nineHearts.jpg","queenHearts.jpg","sevenHearts.jpg","sixHearts.jpg",
"tenHearts.jpg","threeHearts.jpg","twoHearts.jpg"
};
private String[] spades = {
"aceSpades.jpg","eightSpades.jpg","fiveSpades.jpg","fourSpades.jpg","jackSpades.jpg",
"kingSpades.jpg","nineSpades.jpg","queenSpades.jpg","sevenSpades.jpg","sixSpades.jpg",
"tenSpades.jpg","threeSpades.jpg","twoSpades.jpg"
};
private String[][] all = {
clubs,diamonds,hearts,spades
};
private ArrayList<ImageIcon> allCards = new ArrayList<ImageIcon>();
public Cards()
{
try
{
addCardsAndChangeSize();
shuffle();
}
catch(Exception e)
{e.printStackTrace();}
}
/**
* @param x Cards name with extension
* @return Face Value of Card
*/
public static int getFaceValue(String x)
{
int face = 0;
switch(x)
{
case "aceClubs.jpg":
case "aceDia.jpg":
case "aceHearts.jpg":
case "aceSpades.jpg":
face = 1;
break;
case "eightClubs.jpg":
case "eightDia.jpg":
case "eightHearts.jpg":
case "eightSpades.jpg":
face = 8;
break;
case "fiveClubs.jpg":
case "fiveDia.jpg":
case "fiveHearts.jpg":
case "fiveSpades.jpg":
face = 5;
break;
case "fourClubs.jpg":
case "fourDia.jpg":
case "fourHearts.jpg":
case "fourSpades.jpg":
face = 4;
break;
case "jackClubs.jpg":
case "jackDia.jpg":
case "jackHearts.jpg":
case "jackSpades.jpg":
case "kingClubs.jpg":
case "kingDia.jpg":
case "kingHearts.jpg":
case "kingSpades.jpg":
case "queenClubs.jpg":
case "queenDia.jpg":
case "queenHearts.jpg":
case "queenSpades.jpg":
case "tenClubs.jpg":
case "tenDia.jpg":
case "tenHearts.jpg":
case "tenSpades.jpg":
face = 10;
break;
case "twoClubs.jpg":
case "twoDia.jpg":
case "twoHearts.jpg":
case "twoSpades.jpg":
face = 2;
break;
case "threeClubs.jpg":
case "threeDia.jpg":
case "threeHearts.jpg":
case "threeSpades.jpg":
face = 3;
break;
case "sixClubs.jpg":
case "sixDia.jpg":
case "sixHearts.jpg":
case "sixSpades.jpg":
face = 6;
break;
case "sevenClubs.jpg":
case "sevenDia.jpg":
case "sevenHearts.jpg":
case "sevenSpades.jpg":
face = 7;
break;
case "nineClubs.jpg":
case "nineDia.jpg":
case "nineHearts.jpg":
case "nineSpades.jpg":
face = 9;
break;
}
return face;
}
//shuffles all the cards in the deck
private void shuffle()
{
long seed = System.nanoTime();
Collections.shuffle(allCards, new Random(seed));
}
/**
* Chooses a card at random from the deck. Also removes that card when chosen
* @return randomly chosen card
*/
public ImageIcon getRandomCard()
{
int index = ((int)Math.random() * allCards.size());
return allCards.remove(index);
}
/**
* @return Image of the back of a card
*/
public ImageIcon getBackCard()
{return backCard;}
public static ImageIcon parseImage(String x)
{
if(x.contains("Dia"))
return new ImageIcon("cards/diamonds/"+x);
else
if(x.contains("Clubs"))
return new ImageIcon("cards/clubs/"+x);
else
if(x.contains("Hearts"))
return new ImageIcon("cards/hearts/"+x);
else
if(x.contains("Spades"))
return new ImageIcon("cards/spades/"+x);
return null;
}
//adds all the cards and adds a description to them loaded into memory
private void addCardsAndChangeSize() throws IOException
{
String tempString;
ImageIcon tempIcon;
allCards.clear();
ClassLoader cldr = this.getClass().getClassLoader();
URL imageURL;
for(int i = 0; i < all.length; i++)
{
for(int x = 0; x < clubs.length; x++)
{
tempString = all[i][x];
tempString = "/cards/"+cardFolders[i]+"/"+tempString;
imageURL = cldr.getResource(tempString);
tempIcon = resizeImage(new ImageIcon(imageURL),70,70,false);
tempString = all[i][x];
tempIcon.setDescription(tempString);
allCards.add(tempIcon);
}
}
backCard = resizeImage(new ImageIcon(cldr.getResource(back)),70,70,false);
}
//resizes images
public ImageIcon resizeImage(ImageIcon imageIcon, int width, int height, boolean max)
{
Image image = imageIcon.getImage();
Image newimg = image.getScaledInstance(-1, height, java.awt.Image.SCALE_SMOOTH);
int width1 = newimg.getWidth(null);
if ((max && width1 > width) || (!max && width1 < width))
newimg = image.getScaledInstance(width, -1, java.awt.Image.SCALE_SMOOTH);
return new ImageIcon(newimg);
}
我不断在 tempIcon = resizeImage(new ImageIcon(imageURL),70,70,false);
谁能告诉我为什么这不能正确加载图像?提醒我将它们预加载到内存中。我的问题不是如何让它变得更好我只是简单地问我在类加载器和类似的东西上做错了什么......
我对 Java 有点陌生,我知道这段代码中的某些部分对你来说会很糟糕,但请再次重申,我不是在问如何使这段代码“专业”,我只是在寻找为什么它给我 null 的解释。
谢谢!
附言如果您需要更多信息图片或 w.e.我会尽快把它放上去
最佳答案
您的问题是 cldr.getResource(tempString);
不返回对象而是返回 null。然后,tempString 出了点问题。类加载器找不到此文件,因此返回 null。
更改 tempString = "/cards/"+cardFolders[i]+"/"+tempString;
至 tempString = "cards/"+cardFolders[i]+"/"+tempString;
关于java - 从 Jarfile 加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060337/
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正在编写一个 Java 程序,并且有一个 launch4j 启动器。我的 JAR 存储在 users %APPDATA% 文件夹下,但是当我尝试在 launch4j 中使用它时,出现以下错误: 这是
我有一个名为 test.jar 的 jar 文件,我使用同一文件夹中的批处理脚本运行它。这是批处理代码: java -jar test.jar pause jar 本身没有问题,我可以很好地运行它。但
我正在尝试编写如下函数: public Map getTestXml(JarFile jarFile) { Map result = Maps.newHashMap(); Enumer
我在 windows(10) 启动时通过批处理文件启动我的应用程序。这就是我的批处理文件中的内容 - start javaw -jar javaApplication.jar` 当 Windows 启
这个问题已经有答案了: What causes "Unable to access jarfile" error? (40 个回答) 已关闭 4 年前。 我正在尝试从我的 java 程序运行 jar
我在播放 jar 文件中的声音时遇到问题。这是我用于播放声音的代码: public class Sounds { public static void playClickSound()
我需要验证我的应用程序中的签名 jar。我发现我可以通过阅读所有内容来做到这一点,如下所示: public boolean verifyJar(String filePath) { try {
使用 JarFile 类,我可以验证 jar 文件是否已签名。但是,根据我对 API 文档和 jarsigner 文档的阅读,我没有看到验证签名者的方法。换句话说,我可以验证 jar 自签名后没有被修
好吧,这是我的问题,也是我要问你的问题...... 我有一个游戏需要从 jar 文件中加载图像(所有图像都像这样打包到 jar 文件中):我首先解压了 jar 文件: 然后它去: 然后在每个文件夹中,
我制作了一个 JavaFX 应用程序,它运行一个 jarfile 并获取它的(错误)输入流,然后用它重新绘制标签。为了做到这一点,(由于循环)我实现了 Platform.runLater(Runnab
我正在尝试使用 SignApk 签署一个 APK ,但我不断收到此错误: Error: Unable to access jarfile signapk.jar 我已将我的 JDK 目录和我的 Sig
我正在为 Java 9 开发一个使用模块分层的启动器库。为了在层中添加模块,我需要将模块名称(作为字符串)传递给父级的配置。 ModuleLayer Javadoc 在类文档的末尾有一个示例。 现在,
我已经下载了一个在 windows XP 上运行的程序。根据说明,打开包含调用 .jar 文件的命令的 .bat 文件就足够了。然而程序打不开。在 friend 的计算机上,该程序确实打开了。 我已经
我已经下载了 RoboMind ( http://robomind.net ) 并尝试让它在 Linux Mint12 上运行知道 Min12 不是最新版本,我仍然希望它运行... 当我使用包中的 .
我是 Spring Boot 微服务和 Docker 的新手。 微服务项目中的dockerfile: docker 构建: docker 图像: 运行镜像时报错:Unable to access ja
在 Ant 文档中 jar command ,它表示需要 destfile 属性。 但是底部有一个使用 jarfile 属性而不使用 destfile 属性的示例。另外,我还拥有一位同事提供的功能代码
Docker 镜像已构建,但当我想运行它时,它显示以下错误: Error: Unable to access jarfile rest-service-1.0.jar 我的操作系统是 Ubuntu 1
我有两个 jar 文件,我想使用 crontab 运行它们。假设有一个 A 和 B jarfile。当我想为 A jarfile 运行 crontab 时,crontab 工作正常。但是当我想运行 B
我是一名优秀的程序员,十分优秀!