Einsatz von CLASSPATH

ExceptionOfExpectation

Aktives Mitglied
Hallo,
ich behandle gerade das Thema "CLASSPATH-Variable", leider komme ich mit der Verwendung nicht so voran.
Als ich einen Pfad mit dem Name "CLASSPATH" in der "Umgebungsvariablen" erstellt habe, wurde die ganze JDK-Package larmgelegt und es konnte kein Java-Befehl in der PowerShell aufgerufen werden. Danach habe ich mit Mühe und nach mehreren Neustartversuchen geschafft die Variable zu löschen.
Der Pfad sollte zu allgemeinen Resourcen führen, wie Images usw. So wie ich es verstanden habe, blockt die CLASSPATH-Variable die andere Variable, die zur Java(jdk-packages) führt. Nachhinein habe ich gelesen, dass man nach dem Semikolon weitere Pfade einbringen kann.

Daher die Frage, wie kann ich die CLASSPATH-Variable einfügen ohne den Java-Package zu beeinträchtigen und wie kann man den Pfad am besten in der Anwendung aufrufen?

PS.: Der Link für die ähnliche Frage hat nicht funktioniert.
 

ExceptionOfExpectation

Aktives Mitglied
Habe alles durchgelesen, leider gibt er keine Erklärung, wie man Classpath-Variable risikofrei in das Betriebssystem integriert, wie man Classpath kurzfristig im PowerShell/cmd definiert und einen Pfad zuweist oder wie ich einen Ressourcen-Pfad durch die Classpath-variable in meiner Applikation verwende, sei es durch getClass().getSystemRessource/AsStream() oder durch andere Paths-Methoden.
Oder mein ganz einfaches Beispiel:
[CODE lang="java" title="Auschnitt"]...

icon = new ImageIcon("icons/Add16.gif", "message"); //HIER HANDELT ES SICH UM EINEM GANZ EINFACHEN PFAD (NICHT CLASSPATH)
lab = new JLabel("ICON", icon, JLabel.CENTER);
...[/CODE]
Der Ordner "icons"(mit dem GIF-Icon) liegt im selben Package wie die Applikation selbst, aber es wird nur der JLabel angezeigt mit dem Inhalt "ICON". Das Icon selbst wird aber nicht angezeigt, kann nicht verstehen warum.
 

mrBrown

Super-Moderator
Mitarbeiter
Habe alles durchgelesen, leider gibt er keine Erklärung, wie man Classpath-Variable risikofrei in das Betriebssystem integriert, wie man Classpath kurzfristig im PowerShell/cmd definiert und einen Pfad zuweist

Sieh es als dezenten Hinweis, dass man die CLASSPATH-Variable nahezu nie benutzt ;)


[…]wie ich einen Ressourcen-Pfad durch die Classpath-variable in meiner Applikation verwende, sei es durch getClass().getSystemRessource/AsStream() oder durch andere Paths-Methoden.
Oder mein ganz einfaches Beispiel:
[CODE lang="java" title="Auschnitt"]...

icon = new ImageIcon("icons/Add16.gif", "message"); //HIER HANDELT ES SICH UM EINEM GANZ EINFACHEN PFAD (NICHT CLASSPATH)
lab = new JLabel("ICON", icon, JLabel.CENTER);
...[/CODE]
Der Ordner "icons"(mit dem GIF-Icon) liegt im selben Package wie die Applikation selbst, aber es wird nur der JLabel angezeigt mit dem Inhalt "ICON". Das Icon selbst wird aber nicht angezeigt, kann nicht verstehen warum.
Das Laden von Resourcen wird in @mihe7's Beitrag doch relativ ausführlich erklärt.

Das Problem mit dem ImageIcon ist, dass der Konstruktor einen Datei-Pfad erwartet, also eine Datei in normalen Dateisystem, keinen Resource-Pfad. Wenn du eine Resource nutzt, müsstest du den Konstruktor mit URL nutzen.
 

ExceptionOfExpectation

Aktives Mitglied
Sieh es als dezenten Hinweis, dass man die CLASSPATH-Variable nahezu nie benutzt ;)
ich finde die Möglichkeit, Ressourcen einmalig auf dem Rechner zu speichern und dann auf diese Ressourcen aus jeder Applikation durch den Absoluten-Pfad zu greifen zu können, sehr verlockend. Dafür eignet sich die Classpath-Variable sehr gut, oder?
Was das ImageIcon betrifft, habe den Unterschied zwischen Datei-Pfad und Ressourcen-Pfad nicht ganz verstanden. Meinst du die Schreibweise von der Zeichenkette?
 

mihe7

Top Contributor
wie man Classpath-Variable risikofrei in das Betriebssystem integriert
Gar nicht.

Der Ordner "icons"(mit dem GIF-Icon) liegt im selben Package wie die Applikation selbst, aber es wird nur der JLabel angezeigt mit dem Inhalt "ICON". Das Icon selbst wird aber nicht angezeigt, kann nicht verstehen warum.
Warum? Das hast Du eigentlich schon als Kommentar danebengeschrieben: Du versuchst hier einfach eine Datei zu laden. Der Pfad ist relativ angegeben und damit abhängig vom aktuellen Arbeitsverzeichnis.

ich finde die Möglichkeit, Ressourcen einmalig auf dem Rechner zu speichern und dann auf diese Ressourcen aus jeder Applikation durch den Absoluten-Pfad zu greifen zu können, sehr verlockend. Dafür eignet sich die Classpath-Variable sehr gut, oder?
Ressourcen gehören in der Regel zum Programm. Diese Ressourcen werden mit dem Programm ausgeliefert und können dann einfach per getResource/getResourceAsStream geladen werden.

Solltest Du tatsächlich Resourcen zwischen verschiedenen Apps teilen wollen (z. B. weil große Dateien per Installer an einen gemeinsam verwendeten Ort gelegt werden), dann kannst Du das ja problemlos über das Dateisystem regeln.

Natürlich kannst Du dafür auch eine eigene Umgebungsvariable verwenden, z. B. MY_APP_RESOURCES=C:\shared\myapp\resources. Dann liest Du die halt im Programm aus (z. B. System.getenv("MY_APP_RESOURCES")) und verwendest den Pfad ganz normal wie jeden anderen auch.

Alternativ bietet sich an, die Pfade über die Preferences API zu verwalten, das hängt von der Anwendung ab.

Auch möglich wäre es, die Umgebungsvariable bei der Ausführung in den Classpath zu integrieren:
Code:
java -cp oneapp.jar;%MY_APP_RESOURCES% my.app.App
java -cp otherapp.jar;%MY_APP_RESOURCES% my.otherapp.App

Kurz: Möglichkeiten gibt es viele.
 

ExceptionOfExpectation

Aktives Mitglied

ExceptionOfExpectation

Aktives Mitglied
Was wurde denn noch nicht beantwortet?

Dieser Part:
Das Problem mit dem ImageIcon ist, dass der Konstruktor einen Datei-Pfad erwartet, also eine Datei in normalen Dateisystem, keinen Resource-Pfad. Wenn du eine Resource nutzt, müsstest du den Konstruktor mit URL nutzen.
Verstehe nicht warum der ImageIcon-Konstruktor, den ich mit dem String Parameter benutze, keinen Icon erzeugt. Ich habe in der Dokumentation gelesen und habe nichts gefunden, was dagegen spricht. Das ist die ZeichenKette von dem Pfad: "icons/Add16.gif" und dieser Verzeichnis existiert zusammen mit dem Icon. Es handelt sich hier um einen Datei-Pfad.
 

mrBrown

Super-Moderator
Mitarbeiter
Das Verzeichnis existiert in deinem aktuellen Arbeitsverzeichnis? Also dort, wo du die Anwendung startest, nicht im Source-Ordner oder irgendeinem Package?

Wenn es eine Resource ist, also zB in einem Package liegt, musst du es explizit als Resource laden, und die URL dann nutzen.
 

mihe7

Top Contributor
Verstehe nicht warum der ImageIcon-Konstruktor, den ich mit dem String Parameter benutze, keinen Icon erzeugt.
Ich will ja nichts sagen, aber genau darum dreht sich der verlinkte Artikel aus #2 und auch hier in #9 und #11 wurde die Frage beantwortet und @mrBrown hat es jetzt in #15 nochmal geschrieben: eine relative Pfadangabe bezieht sich auf das aktuelle Arbeitsverzeichnis.

Führst Du Dein Programm unter C:\ aus (Arbeitsverzeichnis ist C:\), muss das Bild unter C:\icons\Add16.png zu finden sein. Führst Du das Programmm unter C:\XYZ (Arbeitsverzeichnis ist C:\XYZ) aus, muss das Bild unter C:\XYZ\icons\Add16.png zu finden sein.
 

ExceptionOfExpectation

Aktives Mitglied
Das Verzeichnis existiert in deinem aktuellen Arbeitsverzeichnis? Also dort, wo du die Anwendung startest, nicht im Source-Ordner oder irgendeinem Package?

Wenn es eine Resource ist, also zB in einem Package liegt, musst du es explizit als Resource laden, und die URL dann nutzen.
Ja, genau wo die Anwendung (kompilierte Datei) sich befindet, dort befindet sich auch das Verzeichnis.

Ich verwende noch keinen Source-Order
 

Anhänge

  • TestApp.java
    810 Bytes · Aufrufe: 0
  • Add16.gif
    Add16.gif
    238 Bytes · Aufrufe: 0
K

kneitzel

Gast
Du kannst ja mal eine Ausgabe machen von new File("icons/Add16.gif").getAbsolutePath() - dann siehst Du, an welcher Stelle er es versucht zu finden.

Nur weil da sich die kompilierte Datei befindet hat das noch nichts zu sagen!
 

ExceptionOfExpectation

Aktives Mitglied
was für beide? Ich habe nur diese eine Ausgabe durch:
Java:
System.out.println(new File("icons/Add16.gif").getAbsolutePath());
C:\Users\IRahi\Desktop\Java\Studienhefte\Jav05\Lektion4\icons\Add16.gif
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
GUI-Programmer Java 6 Einstieg und professioneller Einsatz - für 0€ Allgemeine Java-Themen 11
Ark Wann 64 Bit-Befehle im Einsatz? Allgemeine Java-Themen 6
R Einsatz von java.nio-Paket Allgemeine Java-Themen 3
J Kommerzieller Einsatz von Java - Ich blick da nich durch. Allgemeine Java-Themen 14
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
thet1983 Input/Output read properties file from classpath Allgemeine Java-Themen 3
F Classpath als Argument in Funktion übergeben Allgemeine Java-Themen 3
reibi Classpath Classpath Variable beim Tomcat Allgemeine Java-Themen 2
M Ant relative Pfade im Classpath vom Jar-Task Allgemeine Java-Themen 2
H CLASSPATH im Javaprogramm ändern Allgemeine Java-Themen 5
J Beanshell Classpath Reihenfolge Allgemeine Java-Themen 2
M Classpath und Buildpath Allgemeine Java-Themen 5
S .Classpath Datei im Eclipse Projekt Allgemeine Java-Themen 7
B Framework zum durchstöbern des classpath Allgemeine Java-Themen 2
reibi Files über Classpath laden Allgemeine Java-Themen 22
J Class.forName und CLASSPATH -Problem Allgemeine Java-Themen 5
S Eclipse und Glassfish Classpath-Fehler(?) Allgemeine Java-Themen 6
U Java file aus Classpath lesen Allgemeine Java-Themen 1
A AspectJ Compiler nicht im CLASSPATH? Allgemeine Java-Themen 4
A CLASSPATH unter Debian Lenny Allgemeine Java-Themen 4
Fadi Lade Klass(jar), die lib im classpath hat mit URLClassLoader Allgemeine Java-Themen 2
Escorter .jar Datei Classpath mitgeben ohne Dos Fenster Allgemeine Java-Themen 8
D Ordner mit *.properties in classpath ? Allgemeine Java-Themen 5
S Java 5/6 Problem im Classpath Allgemeine Java-Themen 11
P CLASSPATH LINUX Allgemeine Java-Themen 9
N Classpath mit ClassLoader künstlich erweitern Allgemeine Java-Themen 2
E In welcher Datei wird classpath gesetzt? Allgemeine Java-Themen 9
D Classpath setzten bei jogl (jsr-231) Allgemeine Java-Themen 2
S Java greif automatisch auf Classpath zu Allgemeine Java-Themen 2
V komischer ClassPath Allgemeine Java-Themen 6
M [Windows] Aufruf von Java mit Sonderzeichen im Classpath Allgemeine Java-Themen 5
T class file(s) on classpath not found or not accessible Allgemeine Java-Themen 8
A [SOLVED] Classpath und statische Variablen Allgemeine Java-Themen 6
G package und classpath grundsatzfrage Allgemeine Java-Themen 7
F suche im Classpath mit Pattern *.gif Allgemeine Java-Themen 16
P CLASSPATH und Jar Allgemeine Java-Themen 40
P Classpath, Tomcat und Eclipse Allgemeine Java-Themen 4
T Classpath per Java Programm setzen Allgemeine Java-Themen 9
D jdic classpath setzen Allgemeine Java-Themen 2
G Classpath Allgemeine Java-Themen 5
F mit getResourceAsStream () Datei im Classpath suchen Allgemeine Java-Themen 15
G Classpath, Packages und Import Allgemeine Java-Themen 3
G Classpath? Allgemeine Java-Themen 3
S Verständnis Problem - Classpath Allgemeine Java-Themen 5
G Classpath bei JAR Allgemeine Java-Themen 14
M Auf Klassen in jar-File (nicht im CLASSPATH) zugreifen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben