Dynamische Look&Feels

Status
Nicht offen für weitere Antworten.

Thammi

Aktives Mitglied
Hi,
ich bin so ziemlich am verzweifeln bei meinem Versuch dynamisch Look&Feels aus einem Unterordner zu laden. Dort liegen die L&Fs alle in ,jar-Dateien mit einer kleinen Datei die meinem Prog sagt welche Klasse das L&F beinhaltet.

Bisher habe ich schon versucht einen URL-Classloader für die Datei zu erstellen, die Klasse zu laden und dem UIManager zu übergeben, woraufhin der aber nicht die restlichen Klassen findet die für die L&Fs benötigt werden. Ich habe übrigens auch versucht den UIManager aus diesem URLClassloader heraus laden zu lassen ... gleiches Ergebniss.

Mein zweiter Ansatz bestand darin meine gesamten Klassen mit einem URLClassLoader zu laden, der auch auf alle Jars zeigt. Die normalen Klassen meines Programms lädt er ordentlich, jedoch scheint er sich zu weigern die Klassen aus den anderen .jar-Dateien zu laden und als Look&Feel zu akzeptieren. Ich habe wieder die beiden oben beschriebenen Methoden angewandt ohne ein ordentliches Ergebniss zu erzielen.

Wie bekomme ich die Look&Feels aus den .jar-Dateien geladen?
Hat jemand schon Erfahrung mit diesem Thema? Ich würde nur ungern irgendwelche Startparameter benutzen.

Schon mal danke im Vorraus!
 

Ralf Ueberfuhr

Bekanntes Mitglied
Also hier sind 2 Methoden, die du verwenden kannst, um die Dateien oder Verzeichnisse deinem ClassPath hinzuzufügen. Vielleicht hilft das ja:

Code:
	/**
	 * Adds a file to the java classpath. This only has effect for the current application.
	 * @param fileName the file to be added to the classpath
	 * @throws IOException
	 */
	public static void addToClassPath(File file) throws IOException {
		addToClassPath(file.getCanonicalPath(), (URLClassLoader)ClassLoader.getSystemClassLoader());
	}

	/**
	 * Adds a file to the java classpath. This only has effect for the current application.
	 * @param fileName the file to be added to the classpath
	 * @param cl a class loader
	 * @throws IOException
	 */
	public static void addToClassPath(String fileName, URLClassLoader cl) throws IOException {
		Class sysclass = URLClassLoader.class;
		try {
			java.lang.reflect.Method method = sysclass.getDeclaredMethod("addURL",new Class[]{URL.class});
			method.setAccessible(true);
			method.invoke(cl,new Object[]{ new URL("file:/" + fileName) });
			System.out.println("Add "+fileName+"\t to classpath... successful");
		} catch (Throwable t) {
			System.out.println("Add "+fileName+"\t to classpath... not successful");
			t.printStackTrace();
			throw new IOException("Die Datei " + fileName + " konnte nicht in den Classpath aufgenommen werden.");
		}
	}

Danach sollten die Klassen gefunden werden.
 
B

Beni

Gast
Wenn du einen URLClassLoader benutzt, musst du selbst eine Instanz des LookAndFeels anlegen (die Class vom URLClassLoader anfordern, und "newInstance()" benutzen), und dann dieses Objekt dem UIManager übergeben.
Ich weiss, dass zumindest die Skin-LookAndFeels letztes Jahr noch Bugs hatten die das verhinderten, hm, den Hack wie man das reparieren kann habe ich auf einem anderen PC...

Andererseits: wenn du dein Programm in einem JAR-File verschickst, kannst du direkt in das Manifest einen erweiterten Classpath schreiben, der auch weitere JARs nimmt. Der Benutzer würde davon nichts erfahren.

[Edit]
So interessant der Hack von masseur81 auch ist, damit kann man grausam auf die Nase fliegen... Wer garantiert eigentlich, dass der SystemClassLoader ein URLClassLoader ist? Vom SecurityManager wollen wir mal gar nicht sprechen.
 

Thammi

Aktives Mitglied
Hi nochmal.
ich hab mich vorerst für den Hack von masseur81 entschieden, weil er einfach die einzige Möglichkeit ist die ich derzeit sehe. Ich hab ihn leicht abgeändert und bisher alle getesteten Systeme scheinen damit zurechtzukommen. Wenn jemand noch etwas weiss würde ich mich sehr über einen Post freuen!

@Beni:
So habe ich es auch schon probiert, leider ohne Erfolg ;-(
Würde mich sehr freuen wenn du den Hack hier postest wenn du ihn noch findest :)

Danke für die schnelle Hilfe!
 
B

Beni

Gast
Ich muss leider zugeben, so schön wie ich das in Erinnerung hatte, ist mein Hack nicht. Man kann damit ähnlich gut einen Nasenbruch hohlen, wie mit dem anderen Hack.

Code:
public LookAndFeel getInstance(){		
		try{
			// Loader ist ein URLClassLoader. CLASS_NAME ist "com.l2fprod.gui.plaf.skin.SkinLookAndFeel"
			Class clazz = loader.loadClass( Main.CLASS_NAME );

			LookAndFeel instance = (LookAndFeel)clazz.newInstance();

			// hier wird dem LAF mitgeteilt, wo es Daten laden soll
			UIManager.getDefaults().put( "ClassLoader", loader );
			
			return instance;
		}
		catch( Exception ex ){
			Log.catchException( ex, Log.SILENT_EXCEPTION );
			return null;
		}
	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Dynamische ListView-Größe, die bei Fenstergrößenänderung sich anpasst AWT, Swing, JavaFX & SWT 19
M Dynamische Zellengröße und Zeilenumbruch AWT, Swing, JavaFX & SWT 7
M Java FX dynamische Diagramme AWT, Swing, JavaFX & SWT 0
Q-bert Dynamische Komponente erzeugen AWT, Swing, JavaFX & SWT 6
4a61766120617274697374 dynamische Tree View AWT, Swing, JavaFX & SWT 2
P JavaFX Dynamische TableView AWT, Swing, JavaFX & SWT 14
G Dynamische ComboBox AWT, Swing, JavaFX & SWT 3
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
S Jtable dynamische Spaltenbreite AWT, Swing, JavaFX & SWT 5
B SWT Dynamische GUI (Layoutmanager?) AWT, Swing, JavaFX & SWT 2
P Dynamische Seite zum basteln für den User AWT, Swing, JavaFX & SWT 8
B SWT TreeViewer dynamische Anzeige von Icons AWT, Swing, JavaFX & SWT 3
J Java - dynamische Anpassung an Fenstergröße? AWT, Swing, JavaFX & SWT 4
B Swing Dynamische JMenuBar AWT, Swing, JavaFX & SWT 2
C Swing Dynamische JComboBox (Filter) AWT, Swing, JavaFX & SWT 28
W "Dynamische JComboBoxes" AWT, Swing, JavaFX & SWT 5
N Swing Dynamische Controls AWT, Swing, JavaFX & SWT 5
C JTable dynamische erweitern AWT, Swing, JavaFX & SWT 2
T 2D-Grafik Statisches Hintergrundbild, dynamische Bilder drüber AWT, Swing, JavaFX & SWT 2
N Dynamische JFreechart updated UI nicht AWT, Swing, JavaFX & SWT 5
G Große dynamische ContextMenus erzeugen (Eclipse RCP) AWT, Swing, JavaFX & SWT 4
F Swing Dynamische Größenanpassung AWT, Swing, JavaFX & SWT 4
trash Dynamische JTable (SQL) AWT, Swing, JavaFX & SWT 5
L Dynamische Textgröße bei Buttons AWT, Swing, JavaFX & SWT 3
lordcarlos Dynamische und interaktive grafik AWT, Swing, JavaFX & SWT 5
T Swing JTable dynamische Zeilenhöhe AWT, Swing, JavaFX & SWT 5
U Dynamische Panel hinzufügen AWT, Swing, JavaFX & SWT 6
N Swing Dynamische JRadioButtons und Visual Editor AWT, Swing, JavaFX & SWT 4
Q Dynamische Zahl und Positionierung von Objekten AWT, Swing, JavaFX & SWT 5
S Swing Dynamische JPanels: Vertikales Strecken verhindern AWT, Swing, JavaFX & SWT 4
hdi dynamische Iteration über Components AWT, Swing, JavaFX & SWT 3
E Dynamische JComboBox AWT, Swing, JavaFX & SWT 3
F dynamische Ausgabe eines extenen Programms umleiten AWT, Swing, JavaFX & SWT 6
F Dynamische Swing Elemente AWT, Swing, JavaFX & SWT 10
G Dynamische JMenuBar AWT, Swing, JavaFX & SWT 2
T Dynamische Anpassung einer jCheckBox AWT, Swing, JavaFX & SWT 11
O Bindings, dynamische Verbindung (Vorbau mit Netbeans) AWT, Swing, JavaFX & SWT 10
G Dynamische Menüs mit Liste von MRU Dateien AWT, Swing, JavaFX & SWT 2
X Dynamische linien (Position und Länge) AWT, Swing, JavaFX & SWT 4
L Dynamische Buttons erstellt, aber wie ein Event zuweisen? AWT, Swing, JavaFX & SWT 11
T dynamische anzeige? AWT, Swing, JavaFX & SWT 4
S Dynamische Ausgabe im JTextField AWT, Swing, JavaFX & SWT 7
K dynamische jlabels AWT, Swing, JavaFX & SWT 21
M dynamische Grafik in JFrame einbetten AWT, Swing, JavaFX & SWT 2
G JTable dynamische Darstellung der ankommenden Daten AWT, Swing, JavaFX & SWT 19
G JTextField & Dynamische Grössenänderung? AWT, Swing, JavaFX & SWT 8
K TableLayout - dynamische Elemente zu spät ge-updated AWT, Swing, JavaFX & SWT 3
O Dynamische Checkboxen AWT, Swing, JavaFX & SWT 21
T Dynamische GUI's AWT, Swing, JavaFX & SWT 10
K dynamische Bilder laden AWT, Swing, JavaFX & SWT 5
Ruvok Look and Feels AWT, Swing, JavaFX & SWT 2
DEvent Professionelle Look and Feels AWT, Swing, JavaFX & SWT 9
M kann man auch eigene look and feels machen? AWT, Swing, JavaFX & SWT 2
M Look and Feels dynamisch abfragen AWT, Swing, JavaFX & SWT 13
G Look and Feels AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben