【问题标题】:Java application in Linux that call .NET Mono with IKVMLinux 中使用 IKVM 调用 .NET Mono 的 Java 应用程序
【发布时间】:2014-06-06 16:41:18
【问题描述】:

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

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

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

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

创建了 MonoLib.jar

然后我想在名为 Demo.js 的纯 java 类中测试 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

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

【问题讨论】:

    标签: java c# linux mono ikvm


    【解决方案1】:

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

    【讨论】:

    • 我已经创建了mscorlib.jar 现在如何添加呢?当我使用 export CLASSPATH="/home/user/mscorlib.jar" 将它添加到 CLASSPATH 时,它仍然报告相同的错误。类路径之前是空行。
    • 请看我的问题,如果我能得到关于“我可以用一个命令添加多个罐子吗?”的答案,我会很满意
    • @eomeroff 您可以像添加任何其他 jar 文件一样添加它:javac -classpath mscorlib.jar:MonoLib.jar Demo.java
    • 谢谢。再想想怎么运行呢? ikvm -classpath .:MonoLib.jar 演示失败。 NoClassFoundError 我相信它仍然需要 mscorlib.jar
    • @eomeroff javac 和 ikvm 是不同的东西。针对这个新问题提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多