- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在尝试加载和使用 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/
我正在使用 IKVM 将 java 应用程序包装到 dll 中。我对 IKVM 不是特别熟悉,所以我提前为没有提供足够的信息表示歉意。无论如何,我正在使用一个 C# 库来调用 IKVM 创建的 dll
我已经开始使用 IKVM 将 Java 库转换为 .NET CIL。我可以成功编写一个 C# 程序,该程序引入 (inproc) 翻译后的 Java 程序集作为引用,并调用翻译后的 Java 代码。
对于要使用 IKVM 转换为 .NET 的 Java 项目,替换缺少的 BufferedImage 功能的最佳和/或最简单方法是什么? 运行应用程序时,我基本上会收到“cli.System.NotIm
我使用上面的内容并写了这个:
我一直在研究 IKVMing Apache 的 FOP 项目以与我们的 .NET 应用程序一起使用。它是一种商业产品,在考虑许可方面,IKVM 由于使用了 GNU 类路径而遇到了一些棘手的问题。据我所
在 Java 中,可以注册一个安全提供程序,如 BouncyCastle通过编辑 JRE 或 JDK 的安全策略文件来静态,或者通过以编程方式添加提供程序来动态。 当使用 IKVM 将像 Bouncy
我有一个从 jar 文件转换而来的 .NET 程序集。该库在其类路径中查找文件。运行应用程序时,我不断收到丢失的资源异常。 我试过了: - 将资源文件放在我的 bin 文件夹中 - 将资源文件放在我的
我正在使用 Lucene.Net,但有一些有趣的 Lucene Java 组件(尤其是分析器)尚未移植到 Lucene.NET,所以也许 IKVM 是更好的选择。一些研究表明 IKVM 似乎工作得很好
我正在尝试制作 UCanAccess在 C# 中工作。我正在 Linux 上使用 Mono 开发 MonoDevelop。我已经使用 IKVM 将所需的 .jar 文件转换为 .dll .NET 文件
我想在我的 .NET 应用程序中使用 Apache POI,我知道有一个端口 NPOI,但它不完整并且没有与 PowerPoint 相关的功能。 我尝试使用以下命令对它进行 IKVM: ikvmc -
我正在使用 MPXJ ,这是一个允许在 Java 和 .Net 中操作项目信息的库。(更多信息在 http://mpxj.sourceforge.net/)我正在使用 Visual Studio 20
我使用 IKVM 从 JAR 文件生成了一个 DLL: ikvmc -target:library mylib.jar 我想在 Visual C++ 项目中使用 DLL。从我自己的代码调用 dll 函
是IKVM.NET在 .NET 应用程序中使用 Java 代码或 Java 库的好方法? 有人使用过这个工具吗?有其他选择吗?是否可以在基于 COM 的应用程序(如 Visual Basic 6 或经
IKVM is fully supported by Mono and its part of the standard Mono package distribution. 已下载 Mono MRE
我目前正在尝试加载和使用 Gephi Toolkit来自 .Net 4 C# 网站。 我有一个针对 IKVM 虚拟机编译的工具包 jar 文件版本,它使用以下代码从命令行应用程序中按预期工作: var
我正在 .net 中使用 Saxon 库。我最近提交了一份可能存在错误的报告,但我想自己使用源代码。我从http://sourceforge.net/projects/saxon/files/Saxo
我有一个 java 程序 (jar),它序列化一个类以使用 ObjectOutputStream 归档。我需要在 .NET 项目中使用程序的这一部分,为此我已使用 ikvmc.exe 将 jar 转换
我使用 IKVM 将 Java 应用程序编译为 C# dll。我试图在使用 .Net Framework 2.0 的 C# 项目中使用此 dll,但失败了,因为转换后的 dll 框架显然更高。我查看了
我正在使用 IKVM 将 java .jar 文件转换为 .NET .dll 文件。我可以从整数类型的 getter 和 setter 创建一个属性..但我无法在 java 代码中对字符串数据类型执行
这是这篇文章的后续,我发现了如何与通过 IKVM 从 .jars 生成的 dll 文件进行交互 How to call a dll file from c# 我在 Java 中创建的应用程序作为一个独
我是一名优秀的程序员,十分优秀!