404 lines
16 KiB
HTML
404 lines
16 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title>IKVM.NET Tutorial</title>
|
|
<link type="text/css" href="../skin/page.css" rel="stylesheet">
|
|
</head>
|
|
<body text="#000000" bgcolor="#FFFFFF">
|
|
<!--================= start Navigation Path ==================-->
|
|
<table summary="navigation path" width="100%" border="0" cellpadding="0" cellspacing="0">
|
|
<tr>
|
|
<td nowrap="nowrap" valign="middle" bgcolor="#CFDCED" height="20"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><!--===== breadcrumb trail (javascript-generated) ====--><font size="2" face="Arial, Helvetica, Sans-serif"><script src="../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script></font></td>
|
|
</tr>
|
|
<tr>
|
|
<td bgcolor="#4C6C8F" height="2"><img height="2" width="2" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
</table>
|
|
<!--================= end Navigation Path ==================-->
|
|
<!--================= start Banner ==================-->
|
|
<table summary="header with logos" width="100%" border="0" cellpadding="0" cellspacing="0">
|
|
<tr>
|
|
<!--================= start Group Logo ==================-->
|
|
<td bgcolor="#294563"></td>
|
|
<!--================= end Group Logo ==================-->
|
|
<!--================= start Project Logo ==================--><td width="100%" align="center" bgcolor="#294563"><a href="http://www.ikvm.net/"><img border="0" class="logoImage" alt="IKVM.NET" src="../images/project.gif" title="Java on .NET"></a></td>
|
|
<!--================= end Project Logo ==================-->
|
|
<!--================= start Search ==================--><td valign="top" rowspan="2" bgcolor="#294563"></td>
|
|
<!--================= start Search ==================--><td bgcolor="#294563"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="bottom" bgcolor="#294563" colspan="2">
|
|
<!--================= start Tabs ==================-->
|
|
<div class="tab">
|
|
<table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
|
|
<tr>
|
|
<td width="6"><img alt="" height="8" width="6" src="../skin/images/spacer.gif"></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<!--================= end Tabs ==================-->
|
|
</td><td bgcolor="#294563"><img alt="" width="1" height="1" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
<tr>
|
|
<td bgcolor="#4C6C8F" colspan="4"><img width="1" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
</table>
|
|
<!--================= end Banner ==================-->
|
|
<!--================= start Menu, NavBar, Content ==================-->
|
|
<table summary="page content" bgcolor="#ffffff" width="100%" border="0" cellpadding="0" cellspacing="0">
|
|
<tr>
|
|
<td valign="top">
|
|
<table summary="menu" border="0" cellspacing="0" cellpadding="0">
|
|
<tr>
|
|
<!--================= start left top NavBar ==================-->
|
|
<td rowspan="3" valign="top">
|
|
<table summary="blue line" border="0" cellpadding="0" cellspacing="0">
|
|
<tr>
|
|
<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
<tr>
|
|
<td bgcolor="#CFDCED"><font color="#4C6C8F" size="4" face="Arial, Helvetica, Sans-serif"> </font></td>
|
|
</tr>
|
|
<tr>
|
|
<td bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<!--================= end left top NavBar ==================--><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap" valign="top" bgcolor="#4C6C8F">
|
|
<!--================= start Menu items ==================-->
|
|
<div class="menu">
|
|
<ul>
|
|
<li>
|
|
<font color="#CFDCED">About</font>
|
|
<ul>
|
|
|
|
<li>
|
|
<a href="../index.html" title="">Home</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../download.html" title="">Download</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../uses.html" title="">Uses</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="http://weblog.ikvm.net" title="">News</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="http://weblog.ikvm.net/story.aspx/faq" title="">FAQ</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="http://weblog.ikvm.net/story.aspx/license" title="">License</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../stories.html" title="">Case Studies</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<font color="#CFDCED">User's Guide</font>
|
|
<ul>
|
|
|
|
<li>
|
|
<a href="../userguide/intro.html">Introduction</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../userguide/install.html" title="">Installation</a>
|
|
</li>
|
|
|
|
<li>
|
|
<span class="sel"><font color="#ffcc00">Tutorial</font></span>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../userguide/tools.html" title="">Tools Reference</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<font color="#CFDCED">Developer's Guide</font>
|
|
<ul>
|
|
|
|
<li>
|
|
<a href="../devguide/intro.html" title="">Introduction</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../devguide/concepts.html" title="">Concepts</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../devguide/net2java.html" title="">Using Java Libraries</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../devguide/java2net.html" title="">Developing in Java</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<font color="#CFDCED">Contributing</font>
|
|
<ul>
|
|
|
|
<li>
|
|
<a href="http://sourceforge.net/mail/?group_id=69637">Mailing Lists</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="http://sourceforge.net/tracker/?group_id=69637">Report Bugs</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="http://sourceforge.net/cvs/?group_id=69637">CVS Repository</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<!--================= end Menu items ==================-->
|
|
</td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="bottom" align="left" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-left.gif"></td><td bgcolor="#4C6C8F"><img height="10" width="10" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td valign="bottom" align="right" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="../skin/images/menu-right.gif"></td>
|
|
</tr>
|
|
<tr>
|
|
<td height="1" bgcolor="#294563"><img width="1" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
</table>
|
|
</td><td valign="top" width="100%">
|
|
<table summary="content" width="100%" border="0" cellpadding="0" cellspacing="0">
|
|
<!--================= start middle NavBar ==================-->
|
|
<tr>
|
|
<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="left" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
|
|
|
|
|
|
</font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td align="right" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
|
|
|
|
|
|
</font><img width="10" height="8" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
<!--================= end middle NavBar ==================-->
|
|
<!--================= start Content==================-->
|
|
<tr>
|
|
<td align="left" width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td colspan="2" align="left" width="100%">
|
|
<div xmlns:xhtml="http://www.w3.org/1999/xhtml" class="content">
|
|
<table class="title" summary="">
|
|
<tr>
|
|
<td valign="middle">
|
|
<h1>IKVM.NET Tutorial</h1>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<ul class="minitoc">
|
|
<li>
|
|
<a href="#Setup+your+Environment">Setup your Environment</a>
|
|
</li>
|
|
<li>
|
|
<a href="#Run+a+Java+Application+Dynamically">Run a Java Application Dynamically</a>
|
|
</li>
|
|
<li>
|
|
<a href="#Convert+a+Java+Application+to+.NET">Convert a Java Application to .NET</a>
|
|
</li>
|
|
<li>
|
|
<a href="#Develop+a+.NET+Application+in+Java">Develop a .NET Application in Java</a>
|
|
</li>
|
|
</ul>
|
|
|
|
<a name="N10012"></a><a name="Setup+your+Environment"></a>
|
|
<h3>Setup your Environment</h3>
|
|
<div style="margin-left: 0 ; border: 2px">
|
|
<p>This tutorial includes information for both the Windows and Linux platforms. It assumes that
|
|
Windows users will be using the .NET SDK, and Linux users will be using the Mono SDK. </p>
|
|
<p>This tutorial references files in the samples distribution available on the <a href="../download.html">download page</a>.
|
|
Before you begin, prepare your environment by adding the following to your PATH environment variable:</p>
|
|
<ul>
|
|
|
|
<li>The directory containing the IKVM executables</li>
|
|
|
|
<li>The directory containing the C# compiler (Windows: csc / Mono: mcs). On Windows, this is typically
|
|
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322.</li>
|
|
|
|
<li>The directory containing a Java compiler (javac or jikes)</li>
|
|
|
|
</ul>
|
|
</div>
|
|
|
|
|
|
<a name="N1002F"></a><a name="Run+a+Java+Application+Dynamically"></a>
|
|
<h3>Run a Java Application Dynamically</h3>
|
|
<div style="margin-left: 0 ; border: 2px">
|
|
<p>IKVM.NET includes a Java Virtual Machine implented in C#. To try it out, navigate to
|
|
<em>IKVMROOT</em>\samples\hello and compile the sample application:</p>
|
|
<div class="pre">
|
|
<span class="codefrag"> javac Hello
|
|
jar cfm hello.jar manifest.mf Hello.class</span>
|
|
</div>
|
|
<p>Now, to run the application using the IKVM Virtual Machine, enter the following:</p>
|
|
<div class="pre">
|
|
<span class="codefrag"> ikvm Hello</span>
|
|
</div>
|
|
<p>This command starts the virtual machine, which searches for a
|
|
file named Hello.class. When it finds it, it loads it and executes the bytecodes dynamically.
|
|
You should be prompted to enter your name, and see a brief greeting.</p>
|
|
<p>If you experience problems, check the following:</p>
|
|
<ul>
|
|
|
|
<li>Check your capitalization: ikvm, like java, requires you to capitalize class names correctly.</li>
|
|
|
|
<li>If ikvm reports a ClassNotFoundException, check whether the CLASSPATH environment variable is set.
|
|
If so, try clearing the CLASSPATH or adding the current directory to it so ikvm can find the class in the current directory.</li>
|
|
|
|
</ul>
|
|
<p>You can also execute Java applications in a jar file. Try it out:</p>
|
|
<div class="pre">
|
|
<span class="codefrag"> ikvm -jar hello.jar</span>
|
|
</div>
|
|
<p>See the <a href="../userguide/ikvm.html">ikvm reference</a> for more information about ikvm command line options.</p>
|
|
</div>
|
|
|
|
|
|
<a name="N1006A"></a><a name="Convert+a+Java+Application+to+.NET"></a>
|
|
<h3>Convert a Java Application to .NET</h3>
|
|
<div style="margin-left: 0 ; border: 2px">
|
|
<p>IKVM.NET includes <a href="../userguide/ikvmc.html">ikvmc</a>, a utility that converts
|
|
Java .jar files to .NET .dll libraries and .exe applications. In this section, you'll convert a Java application to a .NET
|
|
.exe.</p>
|
|
<p>Navigate to <em>IKVMROOT</em>\samples\hello and enter the following:</p>
|
|
<div class="pre">
|
|
<span class="codefrag"> ikvmc hello.jar</span>
|
|
</div>
|
|
<p>After the command completes, you should find a hello.exe file in the current directory. To execute it:</p>
|
|
<ul>
|
|
|
|
<li>
|
|
<strong>Windows / .NET Framework:</strong>
|
|
|
|
<p>Try running hello.exe. If you get a FileNotFound exception when the .NET runtime attempts to load the referenced
|
|
IKVM.OpenJDK.ClassLibrary.dll, remember that the .NET Framework expects to find referenced dll's in the application
|
|
directory or in the Global Assembly Cache. Either <a href="../userguide/install.html">install the dll's in the
|
|
Global Assembly Cache</a>, or copy them to the application directory.</p>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
<strong>Linux / Mono:</strong>
|
|
|
|
<p>Run it using the following command:</p>
|
|
|
|
<div class="pre">
|
|
<span class="codefrag"> mono hello.exe</span>
|
|
</div>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</div>
|
|
|
|
|
|
<a name="tutorial_java2net"></a>
|
|
<a name="N100A7"></a><a name="Develop+a+.NET+Application+in+Java"></a>
|
|
<h3>Develop a .NET Application in Java</h3>
|
|
<div style="margin-left: 0 ; border: 2px">
|
|
<p>In this section, you will learn the steps needed to develop .NET applications in Java. </p>
|
|
<p>To begin, open a command window and navigate to <em>IKVMROOT</em>\samples\usenetapi.
|
|
Take a look at ShowDir.java -- this is a Java application that uses the .NET API to display a list of files
|
|
in the current directory. Notice the imports at the top -- the package names begin with <span class="codefrag">cli.*</span>. These are not
|
|
packages in the Java API; rather, they are "pseudo" packages that map to .NET namespaces.
|
|
For more information on this, see the <a href="../devguide/java2net.html">Developer's Guide</a>.</p>
|
|
<p>
|
|
<strong>Step 1: Generate Java stubs</strong>
|
|
</p>
|
|
<p>IKVM does not come with a Java compiler, so we will compile ShowDir using a standard Java compiler.
|
|
Since Java compilers can only compile applications that use Java API's, not .NET API's, we have to fool the
|
|
Java compiler into believing that there is really a Java package named cli.System.IO. The
|
|
<a href="../userguide/ikvmstub.html">ikvmstub</a> application
|
|
helps us do this. It generates Java jar files from .NET dll's. The jar files generated by ikvmstub contain Java classes
|
|
and interfaces that correspond to .NET classes, but don't contain any real code. They contain just enough to satisfy
|
|
the Java compiler, and allow it to type check the Java application.</p>
|
|
<p>Type the following:</p>
|
|
<div class="pre">
|
|
<span class="codefrag"> ikvmstub mscorlib.dll</span>
|
|
</div>
|
|
<p>Note: On a Linux Mono installation, you will have to type the full pathname to mscorlib.dll, like this:</p>
|
|
<div class="pre">
|
|
<span class="codefrag"> ikvmstub /usr/lib/mscorlib.dll</span>
|
|
</div>
|
|
<p>After the command completes, you should find a file named mscorlib.jar in the current directory.</p>
|
|
<p>
|
|
<strong>Step 2: Compile the Java source code</strong>
|
|
</p>
|
|
<p>Now, we'll compile the Java source code. If you're using javac, type the following:</p>
|
|
<div class="pre">
|
|
<span class="codefrag"> javac -classpath mscorlib.jar ShowDir.java</span>
|
|
</div>
|
|
<p>(Substitute <span class="codefrag">jikes</span> for <span class="codefrag">javac</span> if you're using that tool.)</p>
|
|
<p>After the command completes, you should find ShowDir.class in the current directory. </p>
|
|
<p>
|
|
<strong>Step 3: Generate a .NET executable</strong>
|
|
</p>
|
|
<p>Now, we'll convert the Java class file to a .NET application. Type the following:</p>
|
|
<div class="pre">
|
|
<span class="codefrag"> ikvmc ShowDir.class</span>
|
|
</div>
|
|
<p>After the command completes, you should find ShowDir.exe in the current directory. You should be able to
|
|
execute it successfully. (On Windows .NET, remember to copy the IKVM dll's to the current directory.)</p>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="attribution">by Stephen Schaub</div>
|
|
</div>
|
|
</td><td width="10"><img width="10" height="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
|
|
</tr>
|
|
<!--================= end Content==================-->
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<!--================= end Menu, NavBar, Content ==================-->
|
|
<!--================= start Footer ==================-->
|
|
<table summary="footer" cellspacing="0" cellpadding="0" width="100%" border="0">
|
|
<tr>
|
|
<td colspan="2" height="1" bgcolor="#4C6C8F"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"><a href="../skin/images/label.gif"></a><a href="../skin/images/page.gif"></a><a href="../skin/images/chapter.gif"></a><a href="../skin/images/chapter_open.gif"></a><a href="../skin/images/current.gif"></a><a href="/favicon.ico"></a></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2" bgcolor="#CFDCED" class="copyright" align="center"><font size="2" face="Arial, Helvetica, Sans-Serif">
|
|
|
|
Send feedback about this page to <a href="mailto:webmaster@ikvm.net?subject=IKVM Website Feedback - Page userguide/tutorial.html">webmaster@ikvm.net</a>
|
|
<br>
|
|
|
|
Copyright ©
|
|
2008 Jeroen Frijters All rights reserved.<script type="text/javascript" language="JavaScript"><!--
|
|
document.write(" - "+"Last Published: " + document.lastModified);
|
|
// --></script></font></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2" align="left" bgcolor="#CFDCED" class="logos"></td>
|
|
</tr>
|
|
</table>
|
|
<!--================= end Footer ==================-->
|
|
</body>
|
|
</html>
|