2015-05-02 45 views
6

Bir kod düzenleyicisi yapıyorum ve otomatik tamamlama üzerinde çalışıyorum. Programlı olarak JDK ile gelen tüm sınıfların bir listesini almak istiyorum.Tüm JDK sınıfları boyunca yineleme

Örnekler: Belirli bir paket için sınıfları almak için yollar bulduk

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

. Örneğin, com.mypackage.foo ile başlayan tüm sınıfları alabilirim. Sorun şu ki, Bootstrap ClassLoader ile yüklenen sınıfları almaya çalışıyorum. Ve OSX JDK'da, bu sınıf yükleyici null olarak görünür. Örneğin, String.class.getClassLoader() yaparsam, bu null.

Herhangi bir fikrin var mı?

+0

Bu [SO soru] (http://stackoverflow.com/questions/2681459/how-can-i-list-all-classes-loaded-in-a -Özel sınıf yükleyici) yardımcı olabilir. –

+0

Evet, saatlerce lol diye arama yaptığımda bunu gördüm. Enstrümantasyon yapmak istemiyorum, çünkü bu hacky ve JVM args verilmesi gerekiyor. Alt "hackerish" çözümü sadece önceden yüklenmiş olan sınıfları verir. Bu yüzden koştuğumda sadece 2 sınıf, binlerce değil. – satnam

cevap

2

rt.jar'i java.util.jar.JarFile ile açabilir ve girişleri üzerinde yinelemelisiniz. Bu URL için rt.jar alınabilir: URL url = Object.class.getResource("String.class");

+0

Programım, rt.jar'ın nerede bulunduğunu nereden biliyor? Bunun sadece benim değil tüm işletim sistemlerinde ve tüm bilgisayarlarda çalışmasını istiyorum. – satnam

+0

@satnam programatik olarak [this] gibi (http://opensourceforgeeks.blogspot.in/2014/11/finding-java-home-programatically-from.html) –

+0

getResource (String.class) yolunu bulabilirsiniz. Bunu yapmak iyi çalışıyor gibi görünüyor. Bu kavanozun yolunu verir. Yani tüm sınıfları endekslemek için kullanacağım. Teşekkürler! – satnam

İlgili konular