2011-05-23 79 views
0

我在eclipse環境中使用groovy和java來開發UI應用程序。我想我的代碼中使用Groovy類加載器,所以我使用Groovy的獲取類加載器保持這樣的傳統方式:Groovy類加載器問題

def str = new File("C:/myGroovyFile.groovy").getText() 
def myclass = getClass(); 
println myclass //facing issue here 
ClassLoader parent = myclass.getClassLoader(); 
GroovyClassLoader loader = new GroovyClassLoader(parent); 
Class groovyClass = loader.parseClass(str); 

在這裏,我所面臨的問題是的getClass()被調用時在eclipse環境中不返回GroovyCOnsole腳本,而是返回調用時返回null的getClassLoader()時返回的java.lang.class。

我想要得到的getClass常規控制檯腳本的保持(),這反過來又可以動態加載我位於C常規文件有用:\

請告訴我,我怎麼能解決這個問題。我試圖把這個代碼放在一個名爲initialize()的方法中。只要此代碼位於主類中,它就可以工作,但是當我將上述代碼放在自定義用戶定義的函數中時,它不起作用。爲什麼這樣?

回答

2

編輯
http://groovy.codehaus.org/Embedding+Groovy
http://groovy.codehaus.org/Class+Loading
http://groovy.codehaus.org/Influencing+class+loading+at+runtime
http://groovy.codehaus.org/api/groovy/lang/GroovyClassLoader.html

既然你能夠從主得到正確的類加載器,你能不能通過裝載機參考初始化()的方法PARAM ?

我遇到了類似Groovlets的問題,類裝載器根據調用的上下文(即腳本或類作用域)而顯示不同。對我來說,解決方案是採用腳本作用域類加載器,並將加載器引用傳遞給類作用域應用程序。 Groovy用戶列表已經涵蓋了groovy在不同時間的類加載的主題;顯然是Groovy所有東西的一個很好的資源; - )
http://groovy.329449.n5.nabble.com/

+0

非常感謝!到目前爲止,我已經通過了自定義方法的引用,但我實際上很想知道爲什麼我不能在單獨的方法中進行類加載。這個問題的目的是爲了得到同樣的答案:) – 2011-05-24 05:30:28

+0

如果你還沒有這樣做,請檢查我上面編輯的四個鏈接,或者發佈到Groovy用戶列表中,Jochen,Guillaume(Groovy的核心開發人員)或其他Groovy「重」會爲你解答: – virtualeyes 2011-05-24 07:56:30