JAR wird nicht gefunden, ist aber im classpath.

Status
Nicht offen für weitere Antworten.
R

Roar

Gast
Hallo,
in meiner Swing anwendung benutzt ich das Kunststoff Look And Feel von incors, hab das jar file runtergeladen und in meinem classpath kopiert, also das gleiche verzeichnis wie die class dateien. wenn ich das programm aber starte kann er das look and feel nicht laden. wenn ich beim kompilieren versuche das package im jar file zu importieren geht's auch nicht. wenn ich dir jar allerdings entpacke funktionierts. muss ich da irgendwas einstellen oder so, damit es funktioniert? dann könnte ich die tablelayout klassen auch in seinem jar file lassen. ich hab keinen bopck das alles in ein großes jar-file zu packen :( :(
 

Vatar

Bekanntes Mitglied
bin mir jetzt nicht sicher, aber ich glaube du musst das jar in das ext(erne) Verzeichnis des jre kopieren. Zumindest hab ich das so mit dem zusätzliches TableLayout gemacht und dann gings.

also bei mir wäre das
Code:
C:\j2sdk1.4.1_01\jre\lib\ext

und dann musst du noch die bibloethek zu deinem Projekt hinzufügen.


P.S.: sieht nicht schlecht aus dieses LookAndFeel, jetzt muss man nur noch schauen wo es das als Open Source gibt
 
R

Roar

Gast
www.incors.org is das look and feel zum runterladen und der source gleich mit...

hmja wenn ich das in das jre/lib/ext verzeichnis packe, dann wird es zwar gefunden, aber wie ist es dann wenn ich das woanders starten möchte? kann ich die kunststoff.jar dann auch in das gleiche verzeichnis legen wie die meinProgramm.jar ?
 

Vatar

Bekanntes Mitglied
Roar hat gesagt.:
www.incors.org is das look and feel zum runterladen und der source gleich mit...
Hm ich dachte das war nur ne Trialversion. Muss vielleicht doch mal richtig lesen :oops:

Roar hat gesagt.:
hmja wenn ich das in das jre/lib/ext verzeichnis packe, dann wird es zwar gefunden, aber wie ist es dann wenn ich das woanders starten möchte? kann ich die kunststoff.jar dann auch in das gleiche verzeichnis legen wie die meinProgramm.jar ?

Ich weis nicht wie das mit diesen jars läuft. Aber ich denke mal wenn du dein Prog auf einem anderen Rechner laufen lassen willst musst du das jar-File auch dort in die jre\lib\ext kopieren. Aber wie gesagt, da kenn ich mich nicht aus (bin grad dabei ein jar zu packen und das haut irgendwie nicht hin)


edit: Ich wollte diese Alloy-LookAndFeel haben. Das kostet leider was :(
 
B

Beni

Gast
Um ein Jar-File zu laden, kannst du einen eigenen ClassLoader benützen.

Damit kannst du ein einzelnes Object laden, und benützen. Leider musst du dann oft mit dem Reflection-Zeugs arbeiten, da die Projekte eigentlich nichts voneinander wissen.
(P.S. wenn eines geladen ist, wird der ClassLoader gespeichert, und alle anderen werden automatisch geladen. Ist noch ganz praktisch :wink: )

(Was Du versuchen kannst: das Look And Feel im ext-Ordner zu speichern, dein Programm schreiben, und anschliessend das Look And Feel wieder aus dem ext-Ordner löschen. Dann musst du einfach den ClassLoader möglichst früh initialisieren. Graue Theorie, aber wer weiss... )

Code:
/*
 * Created on 09.01.2004
 */
package fightSimulator.plugin.io;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

/**
 * @author Benjamin Sigg
 */
public class JarFileClassLoader extends ClassLoader {
	private JarFile file;
	
	public JarFileClassLoader( JarFile file ){
		this.file = file;
	}
	public JarFileClassLoader( File file ) throws IOException{
		this.file = new JarFile( file );
	}
	
	public Class findClass(String name) throws ClassNotFoundException {
		byte[] b = loadClassData(name);
		
		if( b == null )
			throw new ClassNotFoundException( "Can't find class " + name );
		
		return defineClass(name, b, 0, b.length);
	}

	private byte[] loadClassData(String name) {
		JarEntry entry = searchEntryFor( name );
		
		if( entry != null ){
			try {
				InputStream in = file.getInputStream( entry );
				
				int size = (int)entry.getSize();
				byte[] input = new byte[ size ];
				int readed = 0;
				while( readed < size ){
				    int newRead = in.read( input, readed, size-readed );
				    
				    if( newRead <= 0 )
				        throw new IOException( "Klassendatei kann nicht gelesen werden, 0 Bytes erhalten, file=" + file.getName() + ", class=" + name );
				    else
				        readed += newRead;
				}
				
				in.close();
				
				return input;
			}
			catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		return null;
	}
	
	private JarEntry searchEntryFor( String className ){
		String fileName = className.replace( '.', '/' ) + ".class";
		return file.getJarEntry( fileName );
	}
}

Und eine Klasse kannst du folgendermassen laden:
Code:
JarFileClassLoader loader = new JarFileClassLoader( file ); // irgend eine jar-Datei
String className = "packageX.ClassY";  // Irgend ein Name
Class clazz = loader.loadClass( className );
Object obj = clazz.newInstance();
ClassY clazzY = (ClassY)obj;

mfg Beni
 
R

Roar

Gast
hmm interessant, danke *nachdenk* ???:L :###
ich dachte die VM würde die automatisch laden wenn die im classpath sind *hmpf*
 

Vatar

Bekanntes Mitglied
Wieder einmal danke an Beni für diesen Tip mit dem Classloader (wieder mal was sinnvolles gelernt).

Jetzt habe ich aber noch eine Frage:

Ich hab mir bei sun ein jar-File mit gif-bildchen runtergeladen und weis jetzt nicht wie ich auf diese Bilder zugreifen kann, da es ja keine Klassen sind und entpacken wäre ja auch nicht im sinne der erfindung (die anleitung bei sun hat mir auch nicht wirklich geholfen)[/url]
 
R

Roar

Gast
so:
Code:
ImageIcon Save16 = new ImageIcon(getClass().getClassLoader().getResource("icons/general/Save16.gif"))
:wink:
 
B

Beni

Gast
Aber nur wenn es in der gleichen Jar, wie diese Klasse ist (oder trügt mich mein Gedächnis)? :cry:
Tja, aus- und wieder einpacken...
 

Vatar

Bekanntes Mitglied
also kann ich nicht alle Bilder in ein eigenes jar packen und direkt auf ein Bild im jar zugreifen?
 
B

Beni

Gast
Das einzige was mir einfällt ist: ein JarFile herstellen und die Bilder "von Hand" auslesen.
Gibt halt nochmal ein bisschen Code.

mfg Beni
 
R

Roar

Gast
jo da hab ich mal was geschrieben. hier:
Code:
import javax.swing.ImageIcon;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.Vector;
import java.io.IOException;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;

/**
* class IconFactory
* Liest alle icons aus dem gegebenem JarFile
*/

/**
* @author Janni Kovacs
*/

class IconFactory
{
static Vector icons = new Vector();

/**
* liest die icons.
* @throws IOException wenn die Datei nicht gefunden wurde, oder sie nicht geladen werden konnte. 
*/
public static void loadIcons(String fileName) throws IOException
{
JarFile iconsFile = new JarFile(fileName);
int c;
for(int i=0;i<iconsFile.size();i++){
ByteArrayOutputStream os = new ByteArrayOutputStream();
InputStream is =  iconsFile.getInputStream(new JarEntry(iconsFileNames[i]));
while((c = is.read()) >= 0){
os.write(c); }
icons.add(new ImageIcon(os.toByteArray())); c=0; }
}
}

ich hab die jetzt mal ein bisschen verändert, so das man es besser nachvollziehen kann.
 

Düark

Aktives Mitglied
Ich hab da ein ähnliches Problem:
Mein Programm benutzt Fremdklassen in einem .jar - File...
Übersetzen tu ich das ganze mit

javac -classpath "sdk.jar" myApplication.java

Klappt einwandfrei.

Will ich es nun starten mit

java -classpath "sdk.jar" myApplication

sagt java, das es die Klasse myApplication nicht findet.

Entpacke ich das .jar, dann klappt es (beim einfachen Ausführen von "java myApplication".

Imports und so müssten also richtig sein.

Hab ich da nur einen Fehler im Aufruf ??

Hmm...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
kodela Hauptklasse wird nicht gefunden Java Basics - Anfänger-Themen 3
K File wird in der .Jar nicht gefunden Java Basics - Anfänger-Themen 3
J bundel - Datei wird nicht gefunden. Trotz STRG-SHIFT-J Java Basics - Anfänger-Themen 2
S Interpreter wird nicht gefunden Java Basics - Anfänger-Themen 1
D JAVA JDK korrekt installieren javac wird nicht gefunden Java Basics - Anfänger-Themen 2
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
Ruschi JDK installieren javac wird nicht gefunden Java Basics - Anfänger-Themen 48
S Variable, die im Konstruktor gesetzt wird, wird nicht gefunden vom Compiler. Java Basics - Anfänger-Themen 4
Z Variablen String umdrehen, Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
D Input/Output PowerShell Skript wird nicht gefunden Java Basics - Anfänger-Themen 1
I Bei Umlauten und Leerzeichen im Pfad, wird Datei nicht gefunden Java Basics - Anfänger-Themen 5
Z JDK installieren Hauptklasse wird nicht gefunden Java Basics - Anfänger-Themen 9
H Hauptmethode wird nicht gefunden Java Basics - Anfänger-Themen 4
B Webcam wird nicht gefunden Java Basics - Anfänger-Themen 2
G Methoden BlueJ SuM Methode wird nicht gefunden Java Basics - Anfänger-Themen 9
M Umgebungsvariable javac wird nicht gefunden Java Basics - Anfänger-Themen 4
D Compiler-Fehler Klasse wird im selben Ordner nicht gefunden Java Basics - Anfänger-Themen 5
X JDK installieren Pfad wird nicht gefunden Java Basics - Anfänger-Themen 5
W Klasse wird nicht gefunden Java Basics - Anfänger-Themen 8
O Variablen Variable wird nicht gefunden Java Basics - Anfänger-Themen 2
K Klasse wird nicht gefunden Java Basics - Anfänger-Themen 11
P Umgebungsvariable javac wird nicht gefunden Java Basics - Anfänger-Themen 18
H Innerhalb eines Package wird eine Klassenmethode nicht gefunden. Java Basics - Anfänger-Themen 2
B Interpreter-Fehler jar - MainClass wird nicht gefunden Java Basics - Anfänger-Themen 18
W Hauptklasse wird nicht gefunden Java Basics - Anfänger-Themen 32
U class wird nicht gefunden? Java Basics - Anfänger-Themen 34
E Pfad zu einem gif-Bild wird zur Laufzeit nicht gefunden Java Basics - Anfänger-Themen 5
C Bild wird nicht mehr gefunden Java Basics - Anfänger-Themen 2
S Variable wird nicht gefunden und Arrays Java Basics - Anfänger-Themen 17
I Methode wird nicht gefunden Java Basics - Anfänger-Themen 8
H eine als public deklariete Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
G Netbeans: Klasse wird bei Run der Main Klasse nicht gefunden Java Basics - Anfänger-Themen 2
T Globale Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
G FATJar wird nicht gefunden Java Basics - Anfänger-Themen 7
G javac wird nicht gefunden Java Basics - Anfänger-Themen 18
G Package wird nicht gefunden Java Basics - Anfänger-Themen 6
B javac wird nicht gefunden Java Basics - Anfänger-Themen 8
P Servlet wird nicht gefunden Java Basics - Anfänger-Themen 4
S Klasse wird nicht mehr gefunden Java Basics - Anfänger-Themen 3
R Javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
D Fenster wird nicht gefunden! Java Basics - Anfänger-Themen 12
M Bean wird nicht gefunden Java Basics - Anfänger-Themen 2
D Methode wird nicht gefunden Java Basics - Anfänger-Themen 14
C instanzvariable in main wird nicht gefunden Java Basics - Anfänger-Themen 5
G Befehl javac wird nicht gefunden Java Basics - Anfänger-Themen 8
A externe Library wird nicht gefunden Java Basics - Anfänger-Themen 4
G Javac wird nicht gefunden Java Basics - Anfänger-Themen 9
H Konstruktur von der eingebetteten Klasse wird nicht gefunden Java Basics - Anfänger-Themen 2
G properties Datei in jar-File wird nicht gefunden Java Basics - Anfänger-Themen 5
L JavaMail: javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
A Hauptklasse wird nicht in JAR-Datei gefunden Java Basics - Anfänger-Themen 11
D main-Methode wird nicht gefunden Java Basics - Anfänger-Themen 2
T Datei wird nicht gefunden - Warum? Java Basics - Anfänger-Themen 2
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
M Rechteck wird nicht angezeigt Java Basics - Anfänger-Themen 3
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
el_pato DialogFenster wird nicht in Schleife geöffnet? Java Basics - Anfänger-Themen 30
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
H Array wird als Rückgabewert nicht akzeptiert? Java Basics - Anfänger-Themen 2
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
L JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 10
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
H GridPane wird nicht angezeigt Java Basics - Anfänger-Themen 0
H Endkapital wird nicht korrekt ausgegeben. Java Basics - Anfänger-Themen 5
C Methodenrückgabe wird in der main nicht berücksichtigt Java Basics - Anfänger-Themen 2
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
P Bedingung in Schleife wird nicht ausgeführt Java Basics - Anfänger-Themen 5
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben