我想舉一個簡單的Java調用.net程序集的例子,該程序是在linux上用mono創建的。在Linux中用IKVM調用.NET Mono的Java應用程序
我有一個名爲MyClass的這個非常簡單的C#類ClassLibrary項目,稱爲MonoLib
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
然後我想測試MonoLib.jar名爲Demo.js
import cli.MonoLib.*;
public class Demo {
public static void main(String[] args) {
MyClass.TestDotNet();
}
}
純Java的類當我嘗試用命令編譯:
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未找到」 這就是爲什麼我要擴展這個命令
的javac -classpath MonoLib.jar Demo.java
添加mscorlin.jar到類路徑中。 我可以用一個命令添加多個罐子嗎? 因爲我還需要添加mscorlib.jar。
我試圖將它們加入到所謂的MonoTest一個文件夾中,並運行此命令
javac -classpath /home/user/MonoTest/* Demo.java
結果是
的javac:無效的標誌:/home/user/MonoTest/mscorlib.jar 用法:javac的 使用-help爲可能的選項
EDIT2
列表210Idealy我想有這樣的外立面全部.NET功能爲像Java橋類:
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可以在任何Java中使用沒有IKVM的應用程序。
EDIT3
我發現,隨着ikvmstub產生的所有jar文件只能在IKVM vistual機器上的.NET的頂部使用。這意味着我所有的java代碼都必須在IKVM運行時執行?是這樣,有什麼限制,我應該改變我的平臺調用幾個方法形式.NET。它看起來不像我的互操作性。
我已經創建mscorlib.jar現在如何添加它?當我通過導出CLASSPATH =「/ home/user/mscorlib.jar」將它添加到CLASSPATH時,它仍會報告相同的錯誤。班級路徑之前是空行。 – eomeroff
請看看我的問題,如果我能得到有關「我可以用一個命令添加多個罐子?」的答案,我會很滿意。 – eomeroff
@eomeroff像其他任何jar文件一樣添加它:javac -classpath mscorlib.jar:MonoLib.jar Demo.java – Horcrux7