Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux中使用IKVM调用.NET Mono的Java应用程序_Java_C#_Linux_Mono_Ikvm - Fatal编程技术网

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

Linux中使用IKVM调用.NET Mono的Java应用程序,java,c#,linux,mono,ikvm,Java,C#,Linux,Mono,Ikvm,我想举一个简单的例子,java调用linux上使用mono创建的.net程序集 在名为MonoLib的类库项目中,我有一个非常简单的C#类,名为MyClass using System; namespace MonoLib { public class MyClass { public static void TestDotNet() { Consol

我想举一个简单的例子,java调用linux上使用mono创建的.net程序集

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

using System;

    namespace MonoLib
    {
        public class MyClass
        {        
            public static void TestDotNet()
            {
                Console.WriteLine ("Hi I am from .Net");
            }
        }
    }
为了使用类功能,我输入了命令

 ikvmstub Desktop/Mono/MonoLib/MonoLib/bin/Debug/MonoLib.dll
正如上面所解释的

它创建了MonoLib.jar

然后我想在纯java类Demo.js中测试MonoLib.jar

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应用程序没有看到mscorlib功能,因此它说“cli.System.Object not found” 这就是为什么我需要扩展这个命令

javac-classpath MonoLib.jar Demo.java

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

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

 javac -classpath /home/user/MonoTest/* Demo.java
结果是

javac:无效标志:/home/user/MonoTest/mscorlib.jar 用法:javac 使用-help获取可能选项的列表

EDIT2

理想情况下,我希望有一个类似于桥接类的类,它为java提供所有.net功能,如:

import cli.MonoLib.*;
    public class Demo {
            public static void DotNetViaJava {
                MyClass.TestDotNet();
            }
    }



public class DemoTest {
        public static void main(String[] args){
            Demo.DotNetViaJava();
        }
}
我需要这个示例Demo.java中的java类,该类一旦使用IKVM编译,就可以在任何没有IKVM的java应用程序中使用

EDIT3


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

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

我已经创建了mscorlib.jar,现在如何添加它?当我使用export CLASSPATH=“/home/user/mscorlib.jar”将其添加到类路径时,它仍然报告相同的错误。类路径以前是空行。请看一看我的问题,如果我能在“我可以用一个命令添加多个jar吗?”@eomeroff您可以像其他jar文件一样添加它:javac-classpath mscorlib.jar:MonoLib.jar Demo.javaThank。再想想如何运行它?ikvm-classpath.:MonoLib.jar演示失败。NoClassFoundError我相信它仍然需要mscorlib。jar@eomeroffjavac和ikvm是不同的东西。为这个新问题提出一个新问题。