Classpath Eclipse?

Hackepeter

Aktives Mitglied
Hallo,

versuche gerade Bilder in mein Projekt einzubinden. Vorher habe ich immer ein Package erstellt und die Bilder einfach dort reingezogen, allerdings sind die dann später nicht in der JAR-Datei, wenn ich die gesamte Anwendung exportiere. Also habe ich ein wenig gegooglet und gesehen, dass man immer mit getClass().getResource() arbeiten sollte anstelle eines Strings mit dem Pfad anzugeben.

Ich verwende Eclipse und habe in den Projekteinstellungen zum einen die JAR-Datei eingebunden als auch den Ordner src/lib als Klassenordner angegeben, allerdings erhalte ich beim Anlegen folgenden Objekts:
Java:
public class JBGPanel extends JPanel {
	private BufferedImage img;

	public JBGPanel(String image)
	{
		try {
			img = ImageIO.read(getClass().getResourceAsStream("/images/" + image));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	protected void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
	}
}

immer diese Exception:

Code:
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
	at javax.imageio.ImageIO.read(Unknown Source)
	at main.JBGPanel.<init>(JBGPanel.java:19)
	at view.Mainwindow.<init>(Mainwindow.java:547)
	at main.Main.main(Main.java:26)

Was mache ich falsch?
 
Wo genau liegen die Bilder? Sind die Bilder im erstellen jar Archiv?
Falls du die Bilder in einem images/ Ordner hast muss der Ordner bei Eclipse als source folder hinzugefügt sein, sonst werden die Dateien nicht mit ins jar Archiv gepackt.
 
Also die Bilder befinden sich laut Paket-Explorer in der JAR Datei... hatte ursprünglich nen images Ordner, den habe ich zu einer JAR exportiert und die JAR hab ich dann in den libs Ordner kopiert...
 
Hat dein Bilder .jar den auch ein Verzeichnis (Package) das "images" heisst? Du sagst auch du hast das .jar in die Projekteinstellungen eingebunden. Dann müsste es im Projekt als "Referenced Libraries" auftauchen. Wenn das alles gegeben ist, sollte es klappen.
 
Vorher habe ich immer ein Package erstellt und die Bilder einfach dort reingezogen, allerdings sind die dann später nicht in der JAR-Datei, wenn ich die gesamte Anwendung exportiere.
Warum. Das ist eigentlich die gängigste Vorgehensweise. Man legt in seinem Projekt ein Package resources oder images an und packt da die Bilder rein. Beim Exportieren als jar kann man dann ja selbst bestimmen welches Packages und Daten mit exportiert werden soll.

Ich bin mir nicht sicher ob ich das richtig verstanden habe: Du hast jetzt ein jar mit den Bildern und dieses jar steckt im jar Deines Programms? Wenn das so ist, kommst Du über den üblichen Weg
Code:
getClass().getResource(...)
nicht an die Bilder ran.
 
Sorry, dass ich das Thema nochmal ausgrabe.

Also folgendes: Ich habe die Klasse JBGPanel, welche von JPanel erbt, weil ich die Methode paintComponent überschreiben möchte um dem Panel eine Hintergrund Grafik zu geben.

Ich habe nun ein package mit dem Bild. Wie kann ich das nun machen?
Code:
getClass().getResource(...)
funktioniert hier irgendwie nicht.

So sieht es derzeit aus:

Java:
package main;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class JBGPanel extends JPanel {
	private BufferedImage img;

	public JBGPanel(String image)
	{
		try {
			img = ImageIO.read(getClass().getResourceAsStream("/images/" + image));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	protected void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
	}
}
 
Ich habe nun ein package mit dem Bild. Wie kann ich das nun machen?
Code:
getClass().getResource(...)
funktioniert hier irgendwie nicht.
Heißt genau? Es wird einfach nichts angezeigt, es wird eine Exception geworfen...

Bei Bildern habe ich getResourceAsStream noch nie benutzt. Meisten lade ich Bilder in etwa so:
Java:
img = new ImageIcon(getClass().getResource("/images/" + image)).getImage();
 
Habs nun folgendermaßen:
Java:
package main;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class JBGPanel extends JPanel {
//	private BufferedImage img;
	private Image img;

	public JBGPanel(String imageName)
	{
		img = new ImageIcon(getClass().getResource("/images/" + imageName)).getImage();
//		try {
//			img = ImageIO.read(getClass().getResourceAsStream("/images/" + image));
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
	}

	protected void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
	}
}

Java:
contentPane = new JBGPanel("background.jpg");

Und folgende Exception erhalte ich:

Code:
Exception in thread "main" java.lang.NullPointerException
	at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
	at main.JBGPanel.<init>(JBGPanel.java:21)
	at view.Mainwindow.<init>(Mainwindow.java:546)
	at main.Main.main(Main.java:26)

Der Bildname ist richtig und das Package existiert ebenfalls.

Woran könnte das nun liegen?
 
Ich habe das Problem auch.
Ich habe in Eclipse zum Package einen Ordner erzeugt und in diesen die Icons reinkopiert. Den Ordner habe ich dann als Source dazugefügt.

In der Runable Jar fehlet dann der Ordner....nachdem ich diesen manuell in das JAR gestellt habe gings.

GGK
 

Neue Themen


Zurück
Oben