SWT Wie Bilder aus JAR-Dateien einbinden?

Status
Nicht offen für weitere Antworten.

ttplayer

Aktives Mitglied
Hallo,

nachdem ich mich schon durch ein paar Foren erfolglos durchgelesen hab,
wollte ich jetzt fragen, wie ich in SWT Bilder aus JAR-Dateien einbinde.
Ich hab schon oft
Java:
Image image = new Image(display, getClass().getResourceAsStream("D:\Bild.ico");
gelesen, aber da sagt mir Eclipse:
Code:
Cannot make a static reference to the non-static method getClass() from the type Object
Ich habs auch schon mit FileInputStreams und URLs versucht, bin aber bisher nicht auf einen grünen Zweig gekommen???:L

Vielen Dank im Voraus:toll:
 
Nicht sicher ob es das ist, aber bei mir funktioniert das wenn ich alles in ein Jar-Archive packe:

[Java]
URL source = this.getClass().getResource("path to image");
BufferedImage image = ImageIO.read(source);
[/Java]
 
Das funktioniert auch für Image ;-)

(Bin nur nicht sicher, ob es wirklich dein Problem löst. Aber du kannst BufferedImage einfach mit Image ersetzen).
 
Fehler:
1. Zeile:
Code:
Cannot use this in a static context
oder, wenn ich this durch die Klasse ersetze:
Code:
Cannot make a static reference to the non-static method getClass() from the type Object
2. Zeile:
Code:
Type mismatch: cannot convert from BufferedImage to Image
oder, mit Konstruktor:
Code:
The constructor Image(BufferedImage) is undefined

??
 
Hmm, zeig den Code-Ausschnitt, den du da hast. Bei Swing geht es wenn man Image anstatt BufferedImage verwendet. Kann aber sein, dass dies bei SWT nicht geht.
 
Java:
import java.io.*;
import java.net.*;
import javax.imageio.*;

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.graphics.*;

public class Test1 {
public static void main (String [] args) {
	Display display = new Display ();
	final Shell shell = new Shell (display);
    URL source = Test1.getClass().getResource("D:\\Folder.ico");
	Image image = new Image(display,ImageIO.read(source));
	shell.setImage(image);
	shell.pack ();
	shell.open ();
	while (!shell.isDisposed ()) {
		if (!display.readAndDispatch ()) display.sleep ();
	}
	display.dispose ();
}
}
 
Zuletzt bearbeitet:
Dein erster Ansatz war schon der richtige, verwende kein ImageIO in SWT, das ist Swing spezifisch. Dein Problem ist das du getClass nicht in einer statischen Methode aufrufen kannst. Verwende stattdessen
Code:
Test1.class
 
OK mit ein bissel tricksen funktionierts jetzt:
Java:
import java.io.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.graphics.*;

public class Test1 {
	final InputStream bild = (getClass().getResourceAsStream("Folder.ico"));
	
public static void main (String [] args) {
	Display display = new Display ();
	final Shell shell = new Shell (display);
	Test1 test = new Test1();
	Image image = new Image(display, test.bild);
	shell.setImage(image);
	shell.pack ();
	shell.open ();
	while (!shell.isDisposed ()) {
		if (!display.readAndDispatch ()) display.sleep ();
	}
	display.dispose ();
}
}
:toll:

Danke nochmals!
 
OK doch noch nicht erledigt:
Wenn ich das in das JAR-File packe, sagt er:
Exception in thread "main" java.lang.IllegalArgumentException: Argument cannot be null
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.graphics.ImageLoader.load(Unknown Source)
at org.eclipse.swt.graphics.ImageDataLoader.load(Unknown Source)
at org.eclipse.swt.graphics.ImageData.<init>(Unknown Source)
at org.eclipse.swt.graphics.Image.<init>(Unknown Source)
at Test1.main(Test1.java:12)

-> kommt natürlich daher, dass er das Bild nicht findet. In Eclipse, das die Class-Dateien direkt ausführt, gehts...
 
OK, ich musste beim javac noch -sourcepath Folder.ico angeben... 😳
jetzt gehts😀
PS: Es geht nur ohne InputStream, aber dann geht die Transparenz des Bildes nicht mehr...???:L
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Zurück
Oben