2012-11-21 18 views
4

我目前正嘗試從.Net 4 C#網站中加載和使用Gephi Toolkit是否可以在網站中使用與IKVM一起編譯的Gephi?

我有一個版本靠在IKVM虛擬機,作爲使用以下代碼從一個命令行應用程序預期其中工程編譯工具包jar文件:

var controller = (ProjectController)Lookup.getDefault().lookup(typeof(ProjectController)); 
controller.closeCurrentProject(); 
controller.newProject(); 
var project = controller.getCurrentProject(); 
var workspace = controller.getCurrentWorkspace(); 

的三個實例的形式正確地實例化類似於[email protected]

但是如果我運行完全相同的代碼,使用完全相同的使用語句&引用,加載ProjectController實例的第一行返回null。

我已經嘗試了幾個解決方案

首先,我試圖忽略Lookup.getDefault()查詢(類型)調用,而不是試圖創建自己的實例:

var controller = new ProjectControllerImpl(); 
controller.closeCurrentProject(); 
controller.newProject(); 
var project = controller.getCurrentProject(); 
var workspace = controller.getCurrentWorkspace(); 

這在線controller.newProject失敗();我認爲,因爲內部(使用反射器)相同的Lookup.getDefault()。lookup(類型)在構造函數中使用,返回null,然後引發異常。

其次,從這裏:Lookup in Jython (and Gephi)我試圖將%CLASSPATH%設置爲工具包JAR和DLL文件的位置。

Lookup.getDefault()。lookup(type)在Web環境中不起作用的原因是什麼?我不是一個Java開發人員,所以我對Java的這方面有點不太瞭解。

我原以爲有可能自己創建所有的實例,但一直沒能找到辦法。

我也無法找到一種看到爲什麼ProjectController加載返回null的方法。沒有例外,除非我非常愚蠢,似乎沒有一種方法可以看到嘗試加載的結果。

更新 - 答

基於從吉榮弗裏吉特斯答案,我解決了這樣的問題:

public class Global : System.Web.HttpApplication 
{ 
    public Global() 
    { 
     var assembly = Assembly.LoadFrom(Path.Combine(root, "gephi-toolkit.dll")); 
     var acl = new AssemblyClassLoader(assembly); 
     java.lang.Thread.currentThread().setContextClassLoader(new MySystemClassLoader(acl)); 
    } 
} 

internal class MySystemClassLoader : ClassLoader 
{ 
    public MySystemClassLoader(ClassLoader parent) 
     : base(new AppDomainAssemblyClassLoader(typeof(MySystemClassLoader).Assembly)) 
    { } 
} 

代碼ikvm.runtime.Startup.addBootClassPathAssemby()似乎並沒有爲我工作,但是從提供的鏈接,我能夠找到一個解決方案,似乎在所有情況下工作。

回答

0

這是一個Java類加載器問題。在命令行應用程序中,您的主要可執行文件作爲系統類加載程序,並知道如何加載程序集依賴關係,但是在Web進程中沒有主要可執行文件,因此係統類加載程序不知道如何加載任何有用的東西。

其中一個解決方案是調用ikvm.runtime.Startup.addBootClassPathAssemby()將相關程序集添加到引導類加載器。

有關IKVM類加載問題的更多信息,請參閱http://sourceforge.net/apps/mediawiki/ikvm/index.php?title=ClassLoader

相關問題