Image an Gridlayout anpassen

Status
Nicht offen für weitere Antworten.

memoryfan

Mitglied
Hallo erstmal,

bin grad dabei ein Memoryspiel zu programmieren und habe folgende Funktion die mir meine Bilder an das Gridlayout anpasst:

public Image loadImage(String url) {

final int MAX_WIDTH = 140;
final int MAX_HEIGHT = 100;
try {
Image img = ImageIO.read(new File(url)).getScaledInstance(
MAX_WIDTH, MAX_HEIGHT, BufferedImage.SCALE_SMOOTH);
return img;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

...
..
...
for (int i = 0; i < 32; i++) {
ImageIcon icon = new ImageIcon(loadImage(("c:/imgs/" + i
+ ".jpg")));

funktioniert auch alles reibungslos!

Nun möchte ich aber das ganze verfeinern und die Bilder im Projektordner ablegen und folgenderweise aufrufen...

for (int i = 0; i < 32; i++) {
ImageIcon icon = new ImageIcon(loadImage(getClass().getResource((("..../imgs/" + i
+ ".jpg"))));

danach mekert logischerweise die loadImage funktion, da sie nur einen String erwartet!
Habe auch schon mit URL etc. versucht...
hat vielleicht jemand anders ne Idee wie ich das Problem beheben könnte?

danke schon im voraus!
 
das hatte ich schon rausgefunden, es klappt aber leider nicht..

die funktion würde dann so aussehen:

public Image loadImage(URL url) {

final int MAX_WIDTH = 150;
final int MAX_HEIGHT = 100;
try {
Image img = ImageIO.read((url)).getScaledInstance(
MAX_WIDTH, MAX_HEIGHT, BufferedImage.SCALE_SMOOTH);
return img;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

backIcon = new ImageIcon(game.loadImage(getClass().getResource(("packetname/imgs/test.jpg"))));

ergibt aber folgenden Laufzeitfehler:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
at ngm.Karten$CardGame.loadImage(Karten.java:143)
at ngm.Karten.<init>(Karten.java:46)
at ngm.Karten.main(Karten.java:65)

anscheinend findet er nichts im ordner..pfad ist richtig angegeben, habe schon alles überprüft..
woran könnte das noch hacken?

gruß
 
Java:
for (int i = 0; i < 32; i++) {
ImageIcon icon = new ImageIcon(loadImage(getClass().getResource((("..../imgs/" + i
+ ".jpg"))));
...das sieht mir ohnehin komisch aus. Was ist
Code:
..../imgs/0.jpg
denn für ein Pfad?

Ich vermute du hast 2 Probleme:
1) Du möchtest Bilder via
Code:
loadImage(String
) und
Code:
loadImage(URL)
laden. Dann schlage ich vor, dass du zwei Methoden machst, die eine arbeitet mit dem String, die andere mit einer URL. Vielleicht kannst du auch probieren das eine in das jeweils andere Umzuwandeln:
Java:
//String to URL
new URL( string );
new File(string).toURI().toURL();

// URL to String
url.toString();

Wobei ich nicht weiß, ob die URLs aus dem ClassLoader über das Dateisystem direkt ladbar sind. Zumindest nicht, wenn dein Programm aus einer JAR gestartet wird.

2) Die URL die du vom ClassLoader bekommst, ist null, folglich ist der Pfad zur JPG falsch.
 
Also nur so allgemeint, wenn du Bilder laden willst, so dass es auch in einer JAR-Datei funktioniert.

Hier folgende Methode:
[Java]
public Image loadImage(String path) throws IOException{

URL source = this.getClass().getResource(path);
Image image = ImageIO.read(source);

return image;

}
[/Java]

Ich habe diese Methode in einem 2D-Spiel verwendet und sie hat reibungslos funktioniert. Hoffe, dass dir das ein bisschen hilft.

*Edit:
Mache das nächste mal Java-Tags um den Code herum, ungefähr so:
[noparse]
[Java]
Hier der Quellcode
[/Java]
[/noparse]
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben