Wie kann ich alle existierenden Java-Klassen anzeigen lassen?

theuserbl

Bekanntes Mitglied
Hi!
Gibt es eine Möglichkeit alle existierenden Java-Klassen anzeigen zu lassen?



Um es etwas näher zu beschreiben. Angenommen ich habe ein Programm wie

Java:
import javax.swing.*;

public class Test {
  public static void main(String[] args) {
   JFrame f = new JFrame("Mein Fenster");
   JButton b = new JButton("Button");
   f.add(b);
  }
}

dann greift das Programm zur Laufzeit auf alle im Classpath existierenden Verzeichnisse und Jar-Dateien zu (in diesem Fall: rt.jar) und guckt, ob es die Klassen "javax.swing.JFrame" und "javax,swing.JButton" gibt.
Man kann auch prüfen, ob diese Klasse vorhanden ist.

Java:
public class Test {

  public static void main(String[] args) {
  
    String s1 = "javax.swing.JButton";
    String s2 = "javax.swing.GibtEsNicht";
    
    System.out.println(existClass(s1));
    System.out.println(existClass(s2));
  
  }

  public static boolean existClass (String name) {
     try {
       Class tmp = Class.forName(name);
       return true;
     } catch (ClassNotFoundException e) {
       return false;
     }
  }

}

Ich will aber alle Klassen im Package javax.swing erhalten, ohne dessen Namen vorher zu wissen. Und generell will ich alle Klassen aufgelistet haben.

Ist das möglich?

Bisher habe ich im Internet immer nur Beispiele gefunden, wo die Klassen ausgegeben wurden, die aktuell geladen wurden. Also die für das aktuelle Programm zum Ausführen nötig sind.
Ich will aber alle Klassen aufgelistet haben, die mir zur Verfügung stehen.


Grüße
theuserbl
 
Zuletzt bearbeitet:

theuserbl

Bekanntes Mitglied

Ich will das schon gerne zur Laufzeit ausgegeben haben.
Daß ich in der Dokumentation alle Klassen finde, weiß ich schon.
Alternativ könnte ich dann auch diue Jar-Dateien entpacken und nachsehen.

Aber ich will es nun mal zur Laufzeit von einem Java-Programm aufgelistet bekommen. (somit auch nicht auf die Idee kjommen, mir irgendwelche JVM-Flags zu nennen, die dann alles auflisten)

Grüße
theuserbl
 
M

maki

Gast
Auch wenn ich kein griechisch kann,
:D Hehe.. keine Ahnung wie das passiert ist??
Hab den Link korrigiert.


so sieht es danach aus, daß dort einfach nur zu einer beliebigen Klasse die Superclass ausgeben wird. Und von der Superclass wieder die Superclass. Bis man bei java.lang.Object angekommen ist.
ALLE zur Verfügung stehenden Klassen werden jedoch NICHT angezeigt.
Dort wird "einfach nur" nach der tiefsten Klassenhierarchie über den kompletten Classpath gesucht, d.h. Jars werden geladen und alle Klassen geprüft.
Dass du nicht die tiefe der Hierarchie zählen musst ist ja hoffentlich klar ;)
 
T

tröööt

Gast
also ich hab gerade mal den ClassLoader.getSystemClassLoader() mit reflections völlig auseinander genommen ... mal von abgesehen das ich irgendwann selbst nicht mehr so wirklich durchgeblickt habe und mir die klassen auch irgendwann nicht mehr genug informationen gaben habe ich es nicht geschafft irgendwo einen bezug zum rt.jar herstellen zu können ...

der SystemClassLoader ist zwar eine sub-klasse von URLClassLoader ... aber auch der gibt irgendwann nichts mehr her ...

ich hab mir jetzt auch nicht die mühe gemacht einen rekursiven alogrithmus zu schreiben der jede klasse bis zu Object oder den primitives auseinander nimmt .. aber wenn irgendwo im SystemClassLoader was versteckt ist dann sehr gut ...

für mich stellt sich eigentlich eher eine gegenfrage

@TO
wozu das ganze überhaupt ?
 
G

Gast2

Gast
Moin,

Link 1 - http://www.fantasya-pbem.de/source/Fantasya2/beta/src/de/x8bit/Fantasya/util/PackageLister.java
basierend auf
Link 2 - Get All Classes Within A Package | DZone

wozu das ganze überhaupt ?
Variante 1 - von Hand ständig alle verfügbaren Items etc. in einer Liste führen
Problem 1 - vergessen von Klassen, etc.

Variante 2 - über ein Script die Liste automatisch erstellen lassen
Problem 2 - Vergessen das Script zu starten wenn neue Items, Gebäude etc. hinzukommen

Variante 3 - alles wird zur Laufzeit eingelesen
Problem 3 - Welches??

hand, mogel
 
T

tröööt

Gast
Variante 1 - von Hand ständig alle verfügbaren Items etc. in einer Liste führen
Problem 1 - vergessen von Klassen, etc.

Variante 2 - über ein Script die Liste automatisch erstellen lassen
Problem 2 - Vergessen das Script zu starten wenn neue Items, Gebäude etc. hinzukommen

Variante 3 - alles wird zur Laufzeit eingelesen
Problem 3 - Welches??

hand, mogel

meine frage war darauf bezogen welchen sinn es macht alle klassen der kompletten SE-API ermitteln zu wollen ... von den ganzen nicht-öffentlichen implementierungen mal abgesehen ...

du nimmst hier ein konkretes beispiel um eine handvoll elemente automatisch einer liste hinzuzufügen ... das kann ich auch und da ist mir der sinn auch klar ... aber das hat nur sehr wenig mit der frage von TO zu tun ...
 

theuserbl

Bekanntes Mitglied
Danke für Eure Hilfe.
Was ich anhand der Links zu Beispielprogrammen von mogel und ssoul26 sehe ist, daß es keine einfache Möglichkeit gibt, per Reflection alle Klassen aufzulisten. Also muß man ein Programm schreiben, daß in jede eingebundene Jar-Datei guckt, ähnlich dem, wie es in den Beispiel-Programmen beschrieben wurde.

meine frage war darauf bezogen welchen sinn es macht alle klassen der kompletten SE-API ermitteln zu wollen ... von den ganzen nicht-öffentlichen implementierungen mal abgesehen ...

Mein Programm besteht aus einer Jar-Datei. Und alle Klassen eines bestimmten Packages will ich in eine andere, neu erstellte Jar-Datei, kopieren (So eine Art Compiler mit integrierter Runtime).

Desweiteren will ich in einem Editor so etwas wie Code-Completion haben.
Z.B:

Du gibst in den Editor
Java:
import
ein. Daraufhin öffnet sich ein rahmenloses Tootip-ähnliches Auswahlfenster, in dem die Packages com, java, javax, org, sun und sunw stehen.
Du wählst "javax" aus, wodrauf im Editor
Java:
import javax.
steht und sich erneut ein rahmenloses Fenster öffnet, in dem die Packages accessibility, activation, activity, annotation, imageio, .... , swing, ... etc. zur Verfügunmg stehen.
Du wählst "swing" aus.
Daraufhin steht im Editor
Java:
import javax.swing.
und es öffnet sich wieder ein rahmenloses Fenster, in dem die Packages border, colorchooser, event, filechooser, plaf, table, text, tree und undo stehen. Sowie die Klassen AbstractAction, AbstractButton, AbstractCellEditor, ... JButton, ... etc.
Du wählst "JButton" aus, und im Editor steht letztendlich
Java:
import javax.swing.JButton;

Klar ist es nicht umständlich, wenn man nur in rt.jar nachgucken muß,
Aber wenn das ext-Verzeichnis Deiner Java-Installation viele Jar-Dateien hat, der Classpath noch einige, sowie zusätzliche Verzeichnisse, dann wird es umständlich.
Packagenamen wie com oder org besitzen viele Jar-Dateien. Und wenn man das auswählt, müssen alle Unterpackages und Klassen aus allen Jar-Dateien und Classpath-Anganben dann angezeigt werden, als befänden sie sich alle am selben Ort.
Daher hatte ich gehofft, nicht den Weg über die einzelnen Jar-Dateien gehen zu müssen, so daß alle Klassen mir bereits so zugänglich sind, als befänden sie sich am gleichen Ort.
Wie ich nun jedoch erfahren hatte, ist dem nicht so. Denn wenn es einen einfachen Weg gäbe, würde in den verlinkten Programmen nicht eine Lösung beschrieben stehen, die den umständlicheren Weg wählt.

Grüße
theuserbl
 
Zuletzt bearbeitet:
T

tröööt

Gast
ja gut ... sowas macht dann schon irgendwo sinn ... (auch wenn ich IDEs grundsätzlich ablehne) ...

wie gesagt : ich hab versucht mit reflections die vm soweit auseinander zu nehmen um da an irgendwas ranzukommen ... aber auch wenn man rekursiv wirklich alles ausgeben lässt kommt man nicht sehr viel weiter ... da halt solche parameter in den system-properties stehen ... also muss man zusätzlich auch diese mit einbeziehen ... dann mag es sein das man mit reflections weiter kommt ...

was die platzierung von "system-libs" in "ext" angeht ... naja ... persönlich halte ich es für ein relikt aus alten zeiten und teilweise faulheit sowie nicht-wissen sowohl von entwicklern als auch usern richtig mit classpath umzugehen und die klassen so zu schreiben das diese sich daraus alle infos holen ... sehe darin irgendwie keinen tieferen sinn ... zu mal java meist im system-ordner "program files" liegt und man somit admin-rechte benötigt um die libs dort reinzupacken ... womit viele ebenfalls schon wieder überfordert sind ...

ob man wirklich alle gerade zur runtime erreichbaren klassen indizieren sollte ... naja ... wie gesagt : man hat dann viel mit den implementierungen zu tun ... ich würde versuchen mich auf public-schnittstellen zu beschränken ... wobei natürlich gerade bei 3rd party libs nicht immer source und/oder doc beiliegen ...

kannst dich ja mal in den source von IDEs umsehen wie die es machen ... oder noch mal versuchen google etwas zu entlocken ... aber dass das hier jemand mal eben so ausm stehgreif weis .. puh ... schwierig ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
_user_q Alle Kombinationen von "0000" bis "FFFF" kompakt schrieben Allgemeine Java-Themen 13
_user_q JavaFX Robot alle Unicode-Zeichen schreiben lassen können Allgemeine Java-Themen 12
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
8u3631984 Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
L Farbverlauf RGB alle Farben Allgemeine Java-Themen 28
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
S Alle Dateinamen ermitteln Allgemeine Java-Themen 22
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
MaxG. Best Practice Alle Kombinationen berechnen Allgemeine Java-Themen 3
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
J Alle Unit Tests in Maven Modul Projekt ausführen Allgemeine Java-Themen 7
S Anwendung die alle Abhaengigkeiten einer Library listet..? Allgemeine Java-Themen 5
T Alle Kombinationen aus zwei Arrays Allgemeine Java-Themen 8
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
I Alle logs von Logger bekommen Allgemeine Java-Themen 3
U javax.mail.Folder.list() zeigt nicht alle Ordner Allgemeine Java-Themen 5
K Classpath Alle Classen aus einem Package lesen Allgemeine Java-Themen 7
L Alle möglichen Additionen (Rekursiv) Allgemeine Java-Themen 3
KaffeeFan Methoden replace alle Buchstaben Allgemeine Java-Themen 3
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
Z Eclipse hängt sich alle paar Sekunden auf (Keine Rückmeldung). Allgemeine Java-Themen 4
Seikuassi Alle Escape-Sequenzen in einem String ersetzen Allgemeine Java-Themen 4
F Java Spintax: Alle Kombinationen Erzeugen Allgemeine Java-Themen 2
Sogomn Klassen Alle in eine Klasse Allgemeine Java-Themen 11
P Methoden Alle Kombinationen aus 2 Karten berechnen Allgemeine Java-Themen 2
B Threads Barrier mit wait()/notify() aber nicht alle Prozesse terminieren Allgemeine Java-Themen 2
S .jar hat nicht alle Klassen ??? Allgemeine Java-Themen 10
M Zufälligen String generieren und alle 5 Minuten ändern Allgemeine Java-Themen 2
M RegEx alle Matches ausgeben Allgemeine Java-Themen 5
A Applet Alle Threads beim schließen des Applets beenden Allgemeine Java-Themen 8
C SwingWorker.cancle(true) tötet alle Worker Allgemeine Java-Themen 3
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
T Alle Instancen einer Klasse auflisten Allgemeine Java-Themen 13
S Programm das alle aufgerufenen Methoden ausgibt..? Allgemeine Java-Themen 6
S Alle Kombinationen aus ArrayList - Potenzmenge Allgemeine Java-Themen 7
D Alle Variablen final setzen ? Allgemeine Java-Themen 26
brunothg Alle Kombiationen von n Ziffern Allgemeine Java-Themen 2
M Erste Schritte alle xmlFiles in zugehörige pdfFiles einlesen Allgemeine Java-Themen 4
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
D generische Klasse für alle Maps (nicht Collections :-)) Allgemeine Java-Themen 11
E Logger loggt nicht alle Level Allgemeine Java-Themen 2
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
K String: alle X Zeichen Zeilenumbruch Allgemeine Java-Themen 3
F Alle Exceptions abfangen Allgemeine Java-Themen 4
nrg JS als ScriptEngine - alle Punkte ersetzen Allgemeine Java-Themen 4
A Bildschirmauflösung geändert - alle Bildschirminhalte verschoben - was tun? Allgemeine Java-Themen 7
C Alle Klassen eines Packages lesen und instanzieren? Allgemeine Java-Themen 9
B Alle Exceptions auf einmal abfangen Allgemeine Java-Themen 4
S Warum packt er nicht alle Dateien? Allgemeine Java-Themen 13
J Alle Tage eines Jahres Allgemeine Java-Themen 2
AlexSpritze Alle Domains oder FQDN von einem Server erfragen? Allgemeine Java-Themen 2
Spot84 alle kombinationen einer string arraylist Allgemeine Java-Themen 2
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
J Konstrukt um alle Paare und Tripel einer Punkte-Menge bilden Allgemeine Java-Themen 12
B Alle möglichen Buchstabenkombinationen in einem String Allgemeine Java-Themen 7
P alle zusammanhaengenden teilgraphen Allgemeine Java-Themen 7
A alle nicht-dplikate finden Allgemeine Java-Themen 14
M Wie kann ich alle System.out Strings in ein log window umleiten? Allgemeine Java-Themen 6
E Alle unter Prozesse der beim schließen mit schließen Allgemeine Java-Themen 3
A An alle Cracks: Anwendung beenden mit ShutdownHook? Allgemeine Java-Themen 13
J Logger gibt nicht alle Level aus Allgemeine Java-Themen 3
M alle möglichen Zahlenkombinationen Allgemeine Java-Themen 5
B in welchem verzeichnis liegen alle installierten klassen? Allgemeine Java-Themen 6
hdi Für alle fleissigen Helfer! Allgemeine Java-Themen 15
N Alle Fehler ausgeben? Allgemeine Java-Themen 4
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
O Auf alle Events reagieren Allgemeine Java-Themen 3
B J-Unit Tests. Alle Tests eines Package einsammen. Allgemeine Java-Themen 4
U alle Dateien eines Ordners innerhalb einer JAR auflisten Allgemeine Java-Themen 6
S toString() für alle Member einer Klasse. Allgemeine Java-Themen 6
G Alle möglichen Konfigurationen eines Baumes Allgemeine Java-Themen 4
C Alle Möglichen Substrings der Länge k aus String extrahieren Allgemeine Java-Themen 9
C Alle Bilder eines binären Arrays ausgeben Allgemeine Java-Themen 3
G Alle möglichen Permutationen einer Folge n Allgemeine Java-Themen 3
V Alle Klassen eines Package auflisten? Allgemeine Java-Themen 6
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
@ RegEx: Alle Sonderzeichen ausser dem Punkt Allgemeine Java-Themen 4
G Alle Möglichen Kombinationen einer Liste Allgemeine Java-Themen 11
H Alle möglichen Hochkommata ausschließen Allgemeine Java-Themen 6
M Gibt es ein Jar - das alle Componente Automatisch anpasst? Allgemeine Java-Themen 14
K Suche alle Objekte einer bestimmten Klasse Allgemeine Java-Themen 2
N Unter Mac Os X alle laufenden Prozesse ausgeben Allgemeine Java-Themen 3
S Änderung an Proberties datei an alle User weitergeben? Allgemeine Java-Themen 7
P Observer, nicht alle updates bearbeiten Allgemeine Java-Themen 2
der JoJo [TreeSelection] wie bekomme ich alle Elemente Allgemeine Java-Themen 4
G Alle Zeichen des Alphabets ausgeben Allgemeine Java-Themen 4
G Alle Möglichkeiten n Elemente Anzuordnen. Allgemeine Java-Themen 13
0 Alle Teiler einer Zahl performant berechnen? Allgemeine Java-Themen 9
J Funktion alle Möglichkeiten berücksichtigen Allgemeine Java-Themen 5
O Warten bis alle gestarteten Threads beendet sind? Allgemeine Java-Themen 6
G HTML file Alle relativen URL in absolute URL umschreiben? Allgemeine Java-Themen 12
D FileWriter, PrintWriter und wie sie alle heißen. Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben