2015-05-02 30 views
6

Sto creando un editor di codice e sto lavorando al completamento automatico. Voglio ottenere a livello di programmazione un elenco di tutte le classi fornite con JDK.Iterating through all JDK classes

Gli esempi includono:

java.io.File 
java.util.ArrayList 
javax.swing.Action 

ho trovato modi per ottenere le classi per un pacchetto specifico. Ad esempio, posso ottenere tutte le classi che iniziano con com.mypackage.foo. Il problema è che sto cercando di ottenere le classi che sono state caricate con lo Bootstrap ClassLoader. E su OSX JDK, il classloader si presenta come null. Ad esempio, se faccio String.class.getClassLoader(), ovvero null.

Qualche idea?

+0

Questa [domanda SO] (http://stackoverflow.com/questions/2681459/how-can-i-list-all-classes-loaded-in-a -specific-class-loader) potrebbe aiutare. –

+0

Sì, l'ho visto mentre stavo cercando google per ore lol. Non voglio fare strumentazione perché è hacky e richiede di fornire argomenti di JVM. La soluzione "hackerish" in basso fornisce solo le classi che sono già state caricate. Così, quando l'ho eseguito, mostrava solo 2 classi, non migliaia. – satnam

risposta

2

È possibile aprire rt.jar con java.util.jar.JarFile e scorrere le sue voci. Ecco come ottenere l'URL su rt.jar: URL url = Object.class.getResource("String.class");

+0

Come fa il mio programma a sapere dove si trova rt.jar? Voglio che funzioni su tutti i sistemi operativi e tutti i computer, non solo i miei. – satnam

+0

@satnam puoi trovare il percorso JDK a livello di codice come [this] (http://opensourceforgeeks.blogspot.in/2014/11/finding-java-home-programatically-from.html) –

+0

il metodo getResource (String.class) di farlo sembra funzionare bene. Questo dà il percorso per il vaso. Quindi lo userò per indicizzare tutte le classi. Grazie! – satnam