gpt4 book ai didi

c# - 是否可以在网站中使用使用 IKVM 编译的 Gephi?

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:16 25 4
gpt4 key购买 nike

我目前正在尝试加载和使用 Gephi Toolkit来自 .Net 4 C# 网站。

我有一个针对 IKVM 虚拟机编译的工具包 jar 文件版本,它使用以下代码从命令行应用程序中按预期工作:

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

这三个实例以类似于 org.gephi.project.impl.ProjectControllerImpl@8ddb93 的形式正确实例化。

但是,如果我运行完全相同的代码,使用完全相同的 using 语句和引用,则加载 ProjectController 实例的第一行将返回 null。

我已经尝试了几个解决方案

首先,我尝试忽略 Lookup.getDefault().lookup(type) 调用,而是尝试创建我自己的实例:

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

这在 controller.newProject(); 行失败了,我认为是因为在内部(使用反射器)构造函数中使用了相同的 Lookup.getDefault().lookup(type),返回 null 然后抛出异常。

其次,从这里开始:Lookup in Jython (and Gephi)我已尝试将 %CLASSPATH% 设置为工具包 JAR 和 DLL 文件的位置。

Lookup.getDefault().lookup(type) 在 Web 环境中无法工作是否有原因?我不是 Java 开发人员,所以我对这方面的 Java 方面有些了解。

我原以为可以自己创建所有实例,但一直找不到这样做的方法。

我也找不到查看 ProjectController 加载返回 null 的原因的方法。没有抛出异常,除非我很笨,否则似乎没有一种方法可以查看尝试加载的结果。

更新 - 回答

根据 Jeroen Frijters 的回答,我这样解决了这个问题:

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() 似乎对我不起作用,但从提供的链接中,我能够找到似乎适用于所有情况的解决方案.

最佳答案

这是一个 Java 类加载器问题。在命令行应用程序中,您的主要可执行文件充当系统类加载器并知道如何加载程序集依赖项,但在 Web 进程中没有主要可执行文件,因此系统类加载器不知道如何加载任何有用的东西。

其中一种解决方案是调用 ikvm.runtime.Startup.addBootClassPathAssemby() 将相关程序集添加到引导类加载器中。

有关 IKVM 类加载问题的更多信息,请参阅 http://sourceforge.net/apps/mediawiki/ikvm/index.php?title=ClassLoader

关于c# - 是否可以在网站中使用使用 IKVM 编译的 Gephi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13501798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com