2010-07-04 15 views
7

Programımda oluşturulan java-byte-kodu (derlenmiş java-source) var. Şimdi bu bayt kodunu şu anda çalışan Java-VM'ye yüklemek ve belirli bir işlevi çalıştırmak istiyorum. Bunu nasıl yapacağımı bilemiyorum, Java Sınıfı yükleyicilere biraz kazdım ama doğru bir yol bulamadım.Çalışma zamanında Java-Bayt Kodunu yükle

Sabit diskte bir sınıf dosyası alan bir çözüm buldum, ancak aldığım bayt kodu bir Byte-Array biçimindedir ve diske yazmak yerine doğrudan kullanmak istemiyorum.

Teşekkürler!

+0

Ben size aradığınızı bulmak gerekir bu bağlantı altında düşünmek findClass yöntemini overloads özel sınıf yükleyici yazmak gerek //tutorials.jenkov. com/java-reflection/dynamic-class-loading-reloading.html "ClassLoader Load/Reload Example" son bölümüne bakın. –

+0

Sorumu bir şekilde belirsiz: Bir sınıf dosyam yok ama bir bayt dizisi var ve ben doğrudan yüklemek istiyorum. Yine de teşekkürler! – theomega

+0

Ve eminim ki bağlantım tam olarak bunu sağladı. En azından bunu şu yolu kullanarak buldum: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html#defineClass (byte [], int, int) Ayrıca şunları da yapabilirsiniz: Açıkçası her zaman bayt dizinizi geçici bir dizine kaydedin. –

cevap

9

itibaren

public Class findClass(String name) { 
    byte[] b = ... // get the bytes from wherever they are generated 
    return defineClass(name, b, 0, b.length); 
} 
+0

Teşekkürler, bir yol gibi geliyor, ama ClassLoader bir custon yazmadan doğrudan bir yolu yoktur? – theomega

+0

En azından hiç bulamadım –

+0

Çok iyi çalışıyor, teşekkürler! – theomega

2

Bayt kodu, çalışan programın sınıfında değilse, URLClassLoader'ı kullanabilirsiniz. http: http://www.exampledepot.com/egs/java.lang/LoadClass.html

// Create a File object on the root of the directory containing the class file 
File file = new File("c:\\myclasses\\"); 

try { 
    // Convert File to a URL 
    URL url = file.toURL();   // file:/c:/myclasses/ 
    URL[] urls = new URL[]{url}; 

    // Create a new class loader with the directory 
    ClassLoader cl = new URLClassLoader(urls); 

    // Load in the class; MyClass.class should be located in 
    // the directory file:/c:/myclasses/com/mycompany 
    Class cls = cl.loadClass("com.mycompany.MyClass"); 
} catch (MalformedURLException e) { 
} catch (ClassNotFoundException e) { 
} 
+0

Sorumu bir şekilde belirsiz: Bir sınıf dosyam yok ama bir bayt dizisi var ve ben doğrudan yüklemek istiyorum. Yine de teşekkürler! – theomega

+0

Sorunuzu daha hassas bir şekilde düzenlemek için çekinmeyin. Alıntı kodu, harddisk’te sınıf dosyaları ile çalışır. –