我想做一个简单的例子,在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的一个存根。