Linux中的Java应用程序使用IKVM调用.NET Mono

我想做一个简单的例子,在Linux上用mono创build的java调用.net程序集。

在ClassLibrary项目中有一个名为MyClass的非常简单的C#类,叫做MonoLib

using System; namespace MonoLib { public class MyClass { public static void TestDotNet() { Console.WriteLine ("Hi I am from .Net"); } } } 

为了使用我input的命令的类function

  ikvmstub Desktop/Mono/MonoLib/MonoLib/bin/Debug/MonoLib.dll 

正如http://mono-project.com/Java中所解释的那样

创build了MonoLib.jar

然后我想在纯Java类中testingMonoLib.jar,名为Demo.js

 import cli.MonoLib.*; public class Demo { public static void main(String[] args) { MyClass.TestDotNet(); } } 

当我尝试用命令编译它时:

 javac -classpath MonoLib.jar Demo.java 

我得到这个错误:

 Demo.java:4: cannot access cli.System.Object class file for cli.System.Object not found MyClass.TestDotNet(); ^ 

请告诉我我做错了什么是这个正确的方法。

EDIT1:

从下面的答案我的结论是,问题是,我的Java应用程序没有看到mscorlibfunction,因此它说“cli.System.Object找不到”这就是为什么我需要扩展此命令

javac -classpath MonoLib.jar Demo.java

将mscorlin.jar添加到类path。 我可以用一个命令添加多个jar子吗? 因为我还需要添加mscorlib.jar。

我试图将它们添加到一个名为MonoTest的文件夹中,然后运行此命令

  javac -classpath /home/user/MonoTest/* Demo.java 

结果是

javac:invalid flag:/home/user/MonoTest/mscorlib.jar用法:javac use -help获取可能的选项列表

EDIT2

意想不到的,我想有像桥类,面向Java的所有.NETfunction,如:

 import cli.MonoLib.*; public class Demo { public static void DotNetViaJava { MyClass.TestDotNet(); } } public class DemoTest { public static void main(String[] args){ Demo.DotNetViaJava(); } } 

在这个例子中,我需要java类,一旦使用IKVM编译,Demo.java可以在任何Java应用程序中与IKVM一起使用。

EDIT3

我发现使用ikvmstub生成的所有jar只能在.net上的IKVM vistual机器上使用。 这意味着我所有的java代码都必须在IKVM运行时执行? 是这样,有什么限制,我应该改变我的平台调用几个方法forms.NET? 这对我来说似乎不是互操作性。

您还需要将mscorlib.jar添加到类路径中。 这是mscorlib的一个存根。