<!doctype HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML><HEAD>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Environnement de dveloppement du produit IBM OS/2 Warp Developer
Kit, Edition Java</TITLE>
</HEAD><BODY BGCOLOR="FFFFFF">
<A NAME=Top_Of_Page> </A>

<center><H3>Environnement de dveloppement du produit</H3>
<H4>IBM(*) OS/2(*) Warp Developer Kit, Edition Java(*) Technology, Version
1.1.8</H4>
</center>

<P>
Le produit <B>IBM OS/2 Warp Developer Kit, Edition Java(*) Technology,
Version 1.1.8 (Kit de dveloppement)</B> est bas sur le niveau de
maintenance Java 1.1.8 de Sun Microsystems. Ce document dcrit le
composant de dveloppement (Toolkit) du Kit de dveloppement.
<HR>
<MENU>
<LI><A NAME=ToC_1  HREF="#Header_1 " >Installation</A>
<LI><A NAME=ToC_2  HREF="#Header_2 " >Code APPLET</A>
<LI><A NAME=ToC_16  HREF="#Header_16 " >Outils Java</A>
<UL>
<LI><A NAME=ToC_3  HREF="#Header_3 " > Compilateur</A>
<LI><A NAME=ToC_4  HREF="#Header_4 " >Outils de dbogage</A>
<UL>
<LI><A NAME=ToC_4A HREF="#Header_4A " >Dbogueur interactif Java OS/2</A>
<LI><A NAME=ToC_4B HREF="#Header_4B " >Dbogueur JDB</A>
</UL>
<LI><A NAME=ToC_5  HREF="#Header_5 " >JAVAP</A>
<LI><A NAME=ToC_6  HREF="#Header_6 " >JAVADOC</A>
<LI><A NAME=ToC_7  HREF="#Header_7"  >JAVAH</A>
</UL>
<LI><A NAME=ToC_8  HREF="#Header_8 " >Accs  des objets Java  partir d'un programme C</A>
<UL>
<LI><A NAME=ToC_9  HREF="#Header_9 " >Interface JNI (Java Native Interface)</A>
<LI><A NAME=ToC_9A HREF="#Header_9A" >Fichiers d'en-tte et fichiers source JAVAH</A>
</UL>
<LI><A NAME=ToC_10 HREF="#Header_10 " >Fichiers crits  l'aide de PrintStream</A>
<LI><A NAME=ToC_11 HREF="#Header_11 " >Fonctionnement de Java.lang.Class.forName()</A>
<LI><A NAME=ToC_12 HREF="#Header_12 " >Caractres barre oblique inverse et tilde dans les pays DBCS</A>
<LI><A NAME=ToC_13 HREF="#Header_13 " >Conversion entre ShiftJIS et Unicode dans la version japonaise d'OS/2 Warp 4</A>
<LI><A NAME=ToC_14 HREF="#Header_14" >Limitations connues</A>
<LI><A NAME=ToC_15 HREF="#Header_15" >Remarques</A>
</MENU>

<HR><P>
<H2><A NAME="Header_1" HREF="#ToC_1">Installation</A></H2>
<P>
Pour connatre les dernires instructions d'installation, reportez-vous au
fichier README dans le rpertoire <B>\JAVA11</B>. Lorsque
le produit a t install, ce fichier se trouve dans le rpertoire
dans lequel les fichiers du Kit de dveloppement ont t dcompresss.</p>
<P>
Le composant de dveloppement requiert l'installation pralable du
composant d'excution. Ce module doit rsider sur une partition HPFS ou
JFS. Les liens du prsent
document ne peuvent tre activs que si le composant d'excution, le
composant de dveloppement et le dbogueur interactif sont installs
sur la mme unit et le mme rpertoire.
</P>
<HR>
<H2><A NAME="Header_2" HREF="#ToC_2">Code APPLET</A></H2>
<P>
Le code APPLET permet d'insrer une appliquette Java dans une page HTML. Lorsque
la page est charge  l'aide d'un afficheur Web compatible Java,
l'appliquette est excute.
Si l'afficheur Web reconnat le code
APPLET sans pouvoir excuter les appliquettes Java, le texte
indiqu par l'attribut ALT apparat  l'cran. Le visualiseur d'appliquette
est fourni avec le composant d'excution ; vous pouvez galement
l'utiliser pour lancer une appliquette.
</P>
<H3>Syntaxe du code APPLET</H3>
<P>
La syntaxe du code APPLET est dfinie comme suit :
<PRE>
    <B>&lt;APPLET</B>
    <B>      CODE    =  appletFile</B>   ou   <B>OBJECT=serializedApplet</B>
          CODEBASE  =  codebaseURL
          ARCHIVE   =  archiveList
          ALT       =  alternateText
          NAME      =  appletInstanceName
<B>WIDTH = pixels
</B>
<B>HEIGHT = pixels
</B>
          ALIGN     =  alignment
          VSPACE    =  pixels
          HSPACE    =  pixels
    <B>&gt;</B>

     &lt; PARAM NAME = appletAttribute1  VALUE = appletValue1 &gt;
     &lt; PARAM NAME = appletAttribute2  VALUE = appletValue2 &gt;
      .
      .
      .
    <B>&lt;/APPLET&gt;</B>
</PRE>
<DL>
<P><DT><B>CODE = appletFile
</B><DD>Cet attribut indique le nom du fichier contenant la
sous-classe Applet de l'appliquette compile. Ce fichier varie en fonction de l'URL de base de l'appliquette ; ce n'est pas une valeur absolue. Si
        OBJECT n'est pas indiqu, cet attribut est obligatoire.
<P><DT><B>OBJECT = serializedApplet
</B><DD>Cet attribut indique le nom du fichier contenant une reprsentation
        srialise de l'appliquette. La srialisation de l'appliquette
    est annule, la mthode <b>init()</b> n'est pas appele mais la mthode
    <b>start()</b> est excute. L'appliquette dispose de tous les attributs qui lui ont t
    transmis. Il est recommand d'utiliser cette fonction
    avec la plus grande prudence car une appliquette doit tre arrte
    avant d'tre srialise.
Si CODE n'est pas indiqu, cet attribut est obligatoire.
<P><DT><B>CODEBASE = codebaseURL</B>
<DD>Cet attribut facultatif dfinit le rpertoire contenant le code
    de l'appliquette.  Si cet attribut n'est pas indiqu, l'URL du document
    est utilis.
<P><DT><B>ARCHIVE = archiveList</B>
<DD>Cet attribut facultatif dfinit les archives contenant
    les classes et les autres ressources  prcharger. Les classes
    sont charges  l'aide d'une instance AppletClassLoader, avec l'attribut
    CODEBASE indiqu. Dans archiveList, les archives sont spares par des
    virgules (<B>,</B>). Les codes appliquette associs au mme attribut CODEBASE
    partagent la mme instance AppletClassLoader.
<P><DT><B>ALT = alternateText
</B><DD>Cet attribut facultatif dfinit le texte  indiquer
    lorsque l'afficheur reconnat le code APPLET sans pouvoir
    excuter les appliquettes Java.
<P><DT><B>NAME = appletInstanceName
</B><DD>Cet attribut facultatif dfinit le nom d'instance de l'appliquette ;
    il permet aux appliquettes de la mme page de se reconnatre et de communiquer.
<P><DT><B>WIDTH = pixels
</B><DD>Cet attribut obligatoire dfinit la largeur initiale
    de la zone d'affichage de l'appliquette (en pixels), sans tenir compte
    des fentres ou des botes de dialogue associes.
<P><DT><B>HEIGHT = pixels
</B><DD>Cet attribut obligatoire dfinit la hauteur initiale
    de la zone d'affichage de l'appliquette (en pixels), sans tenir compte
    des fentres ou des botes de dialogue associes.
<P><DT><B>ALIGN = alignment
</B><DD>Cet attribut dfinit l'alignement de l'appliquette.
    Les valeurs admises pour l'attribut sont identiques  celles du code
    IMG HTML (left, right, top, texttop, middle, absmiddle,
    baseline, bottom, absbottom).
<P><DT><B>VSPACE = pixels
</B><DD>Cet attribut dfinit le nombre de pixels situs au-dessus ou
    au-dessous de l'appliquette. Son traitement est comparable  celui de l'attribut
    VSPACE sur le code IMG HTML.
<P><DT><B>HSPACE = pixels
</B><DD>Cet attribut dfinit le nombre de pixels de chaque ct
    de l'appliquette. Son traitement est comparable  celui de l'attribut
    HSPACE sur le code IMG HTML.
<P><DT><B>&lt; PARAM NAME = appletAttribute1 VALUE = appletValue1 &gt; ...
</B><DD>Ce code est le seul moyen dont vous disposez pour dfinir un
attribut propre  une appliquette.
    Les appliquettes accdent  leurs attributs  l'aide de la mthode <B>getParameter( )</B>.
</DL>
<H3>Exemple de code APPLET</H3>
<P>
L'exemple ci-aprs prsente les modalits de dfinition du code APPLET,
dans le but d'excuter une appliquette de classe MyApplet dans une
fentre 320 x 120. Deux paramtres sont transmis  l'appliquette,
<B>mynumber</B> et <B>mytext</B> ; si l'afficheur de la page HTML
n'est pas en mesure d'excuter des appliquettes Java, le texte
suivant - indiqu par l'attribut ALT - apparat :
<PRE>
   &lt;applet code="MyApplet.class" width=320 height=120
           alt="Affichage d'une appliquette via un afficheur compatible Java."&gt;
   &lt;param name=mynumber value="42"&gt;
   &lt;param name=mytext   value="Fido 3"&gt;
   &lt;/applet&gt;
</PRE>
<p>
Les paramtres <B>mynumber</B> et <B>mytext</B> sont accessibles
 partir de la classe MyApplet, via des appels  la mthode <B>getParameter()</B>. Le
paramtre <B>mynumber</B> peut tre trait de la manire suivante :
<PRE>
   String  parm;
   int     answer;

   parm  = getParameter("mynumber");
   if (parm == null) {
     answer = 12;
   } else {
     answer = Integer.parseInt(parm);
   }
</PRE>
<HR>
<H2><A NAME="Header_16" HREF="#ToC_16">Outils Java</A></H2>
<p>Les sections ci-aprs dcrivent les outils Java disponibles pour
la programmation et le dbogage des programmes Java.</p>

<HR>
<H3><A NAME="Header_3" HREF="#ToC_3"> Compilateur</A></H3>
<P>
Le compilateur <B></B> permet de convertir le code source Java en code pr-compil,
lu et excut ultrieurement par l'interprteur Java. Le code source
se trouve dans des fichiers <B>.java</B>. Le compilateur stocke le code converti dans un fichier portant le mme nom que le fichier source,
mais avec l'extension <B>.class</B>.

<P>
Au dbut du processus, le compilateur fait appel  une mmoire
dynamique de l'interprteur Java de 8 Mo ; il dispose d'une
allocation de mmoire maximale de 16 Mo. Si la quantit de mmoire
dynamique est insuffisante, vous pouvez dfinir une valeur suprieure
 l'aide de l'option <B>-mx</B> de l'interprteur Java. L'option
<B>-J</B> <B></B>permet de transmettre l'option  l'interprteur. Par exemple, pour compiler le fichier LargeClass.java avec une mmoire
dynamique de 100&nbsp;Mo, vous pouvez indiquer :
<PRE>
        javac -J-mx100m LargeClass.java
</PRE>
<HR>
<H3><A NAME="Header_4" HREF="#ToC_4">Outils de dbogage</A></H3>
<P>
Le Kit de dveloppement intgre deux outils de dbogage Java :
<UL>
<LI><A HREF="#Header_4A " >Le dbogueur interactif</A>
est un outil de dbogage du code source fonctionnant sous OS/2 Warp. Il assure le dbogage des applications Java en local ou  distance.
<LI><A HREF="#Header_4B " >Le Dbogueur Java (JDB)</A>, propos sur les
plateformes 100% Pure Java, est un outil de dbogage de ligne de commande pour les classes Java.
</UL>
<H3>Options de dbogage du compilateur</H3>
<P>
Lors de la compilation de l'application Java, indiquez
l'option <B>-g</B> pour gnrer les tables de dbogage. Ces tables
contiennent des informations relatives aux numros de lignes et aux
variables locales, indispensables aux dbogueurs utiliss.
<P>
Vous pouvez obtenir des informations complmentaires sur JDB en indiquant
l'option <B>-O</B> ; cette option permet d'introduire des mthodes statiques, finales et prives en ligne.
Vous ne devez pas l'utiliser avec le dbogueur interactif ; en
effet, le code en ligne a des effets ngatifs sur l'affichage des
numros de lignes source.
<P>
La taille d'une classe compile avec des donnes de dbogage est suprieure
 celle d'une classe compile sans ces informations.
<H3>Interface de bouclage TCP/IP</H3>
<P>
Pour dboguer une application Java excute sur le mme systme que
le dbogueur, vous devez activer l'interface de bouclage TCP/IP
(Transfer Control Protocol/Internet Protocol). Pour vrifier que l'interface
est active, entrez la commande suivante  l'invite d'une session OS/2 :
<PRE>
        ifconfig lo
</PRE>
Si l'interface est active, les donnes suivantes apparaissent  l'cran :
<PRE>
lo: flags=809&lt;UP,LOOPBACK&gt;
         inet 127.0.0.1 netmask xff000000
</PRE>
Dans le cas contraire, les donnes suivantes s'affichent :
<PRE>
lo: flags=808&lt;LOOPBACK&gt;
</PRE>
Si l'interface TCP/IP est inactive, vous pouvez la lancer en entrant la commande
suivante  l'invite d'une session OS/2 :
<PRE>
        ifconfig lo 127.0.0.1 up
</PRE>
<P>
Pour activer l'interface automatiquement, ouvrez le dossier
TCP/IP, puis l'objet Configuration de TCP/IP. Selon la version de
TCP/IP dont vous disposez, vous pouvez galement ouvrir l'objet
Configuration de TCP/IP en entrant la commande suivante  l'invite d'une
session OS/2&nbsp;:
<UL>
<LI><B>TCPCFG</B> pour la version 4.0 ou prcdente</LI>
<LI><B>TCPCFG2</B> pour la version 4.1 ou suivante</LI>
</UL>
Aprs avoir ouvert l'objet Configuration de TCP/IP, cliquez sur l'onglet
<B>Rseau</B>. Slectionnez l'<B>interface de bouclage</B> comme interface
 configurer, puis choisissez <B>Activation de l'interface</B>. Indiquez
l'adresse IP <B>127.0.0.1</B>  l'invite OS/2. Fermez la fentre de
configuration de TCP/IP et sauvegardez les modifications  l'invite du
systme.
</P>

<HR>
<H3><A NAME="Header_4A" HREF="#ToC_4A">Dbogueur interactif Java OS/2</A></H3>
<P>
Cet outil permet de dboguer les applications Java OS/2 et les appels
de mthodes natives associs (code C ou C++ regroup dans un fichier
DLL OS/2). Le dbogueur interactif est un outil de dbogage du code
source extrmement puissant ; il utilise le programme PM
(Presentation Manager) pour son espace de prsentation et lance le
moteur de dbogage en dehors de la machine virtuelle Java (JVM).
<P>
Pour plus d'informations sur le dbogueur, reportez-vous  la
<A HREF=icatjava\help\icatjava.htm>documentation du dbogueur
interactif du Kit de dveloppement</A>.
<HR>
<H3><A NAME="Header_4B" HREF="#ToC_4B">Dbogueur Java (JDB)</A></H3>
<P>
Le dbogueur <B>JDB</B> est un outil de dbogage de ligne de
commande pour les classes Java. Cet outil est lanc  la place de l'interprteur Java.
Entrez <B>help</B> ou <B>?</B> pour connatre la liste des commandes disponibles et les descriptions associes
 l'invite OS/2, aprs l'activation du dbogueur.
<HR>
<H3><A NAME="Header_5" HREF="#ToC_5">JAVAP</A></H3>
<P>
<B>JAVAP</B> permet de dsassembler un fichier de classes Java et, en fonction des options
indiques, d'afficher diffrentes informations associes,  savoir :
<ul>
<li>les tables de variables locales et les numros de lignes,
<li>le code dsassembl,
<li>les variables et les mthodes publiques,
<li>les variables et les mthodes prives.
</ul>
</p>
<p>
Si vous entrez la commande <B>JAVAP</B> sur la ligne de commande OS/2
sans indiquer d'options, la liste des options disponibles s'affiche.
</p>
<HR>
<H3><A NAME="Header_6" HREF="#ToC_6">JAVADOC</A></H3>
<P>
<B>JAVADOC</B> permet de gnrer un ensemble de pages HTML  partir de dclarations
et de commentaires contenus dans les fichiers source Java. JAVADOC affiche
toutes les dclarations publiques et protges pour les classes, les interfaces, les mthodes et les variables.
Vous pouvez indiquer  JAVADOC un nom de module ou une liste des fichiers source sous forme
d'argument.</P>

<p><b>Remarque :</b> Les fichiers source (.java) sont utiliss et
non les fichiers de classes (.class).
</p>

<p>
Si vous entrez la commande <B>JAVADOC</B> sur la ligne de commande OS/2
sans indiquer d'options, la liste des options disponibles s'affiche.
</p>
<HR>
<H3><A NAME="Header_7" HREF="#ToC_7">JAVAH</A></H3>
<P>
<B>JAVAH</B> permet de gnrer des fichiers d'en-tte et des fichiers source C  partir d'une classe Java.
Ces fichiers sont utiliss pour <A HREF="#Header_9A">accder  des
objets Java  partir d'un programme C</A>.
</p>
<HR>
<H2><A NAME="Header_8" HREF="#ToC_8">Accs  des objets Java  partir d'un programme C</A></H2>
<P>
Vous disposez de deux mthodes pour accder  des objets Java  partir d'un programme C ou C++ natif :
<UL>
<LI><A HREF="#Header_9 " >Interface JNI (Java Native Interface)</A>
<LI><A HREF="#Header_9A" >Fichiers d'en-tte et fichiers source JAVAH</A>
</UL>
<P>
JNI constituait une nouveaut de Java 1.1.1 ; cette interface assure une liaison
plus stable aux mthodes natives ; en effet, la mthode prcdente consistait 
utiliser les fichiers d'en-tte et les fichiers source JAVAH.

<P>
<H3>Remarques gnrales sur la programmation</H3>
<UL>
<LI>La machine virtuelle Java (JVM) modifie le mot de commande de
l'unit de traitement en virgule flottante afin de supprimer
certaines exceptions. Les mthodes natives amenes  modifier ce mot de commande doivent sauvegarder
en entre le contenu du mot et le restaurer en sortie  partir de la mthode
native.

<P><LI>Certaines versions d'OS/2 Warp Server Version 4 antrieures 
FixPak 31 et certaines versions d'OS/2 Warp Server SMP antrieures 
FixPak 31 ne supportent pas l'appel API DosQueryThreadContext.

Dans ce cas, la machine JVM doit mettre en oeuvre un mcanisme
d'interruption volontaire pour la rcupration de place en mmoire. Ce mcanisme exige que toutes les
units d'excution Java recherchent priodiquement les requtes d'interruption ventuelles.
Si une mthode native est confronte  une interruption prolonge, le mcanisme choue et la rcupration de place est impossible.
<P>Sur OS/2 Warp 4, ce mcanisme est remplac par une technique plus
fiable et mieux intgre. Toutefois, il est recommand de limiter le
dlai d'attente des mthodes natives  une ou deux secondes maximum.
<P>
Les metteurs d'appels peuvent prendre part au processus
d'interruption volontaire en veillant  ce que le dlai d'attente
hors de l'environnement Java soit fractionn (&lt; 0,5 seconde),
avec un appel  <b>ThreadCheckForSuspend() </b>entre chaque
intervalle. Par exemple, vous pouvez remplacer le code suivant :
<PRE>
      rc = DosRequestMutexSem( mutex, SEM_INDEFINITE_WAIT);
</PRE>par :<PRE>
      do
      {
        rc = DosRequestMutexSem( mutex, 250L );
        if (rc == ERROR_TIMEOUT) ThreadCheckForSuspend();
      } while (rc == ERROR_TIMEOUT);
</PRE>
<P>
La dfinition prototype pour l'appel ThreadCheckForSuspend est :
<PRE>
       void ThreadCheckForSuspend (void);
</PRE>
<LI>Pour viter les conflits ventuels entre les noms de DLL, utilisez
des valeurs ne commenant pas par la chane <B>JAVA</B>.

</UL>
<HR>
<H2><A NAME="Header_9" HREF="#ToC_9">L'interface JNI (Java Native Interface)</A></H2>
<P>
Vous pouvez utiliser cette fonction, apparue avec Java 1.1.1, pour accder
aux objets Java  partir d'un programme C. Vous disposez ainsi
d'une interface plus stable que la mthode utilise avec les
<A HREF="#Header_9A"> fichiers d'en-tte et fichiers source JAVAH</A>.
<P>
Pour gnrer des mthodes natives en langage C ou C++ pour une
plateforme spcifique, en utilisant l'interface JNI sous OS/2,
procdez comme suit :
<OL>
<LI>Crez un fichier source de classe Java pour associer les mthodes
natives :
<PRE>
    class MyNativeClass
       {
         String x;
         ...
         public native void demo(String x);
         ...
         static { System.loadLibrary("MyLib"); }
       }
</PRE>
<P><B>Remarque : </B> La mthode <b>System.loadLibrary</b> s'excute
lors du premier appel de la classe et charge un fichier DLL MyLib
contenant les mthodes natives.

<P><LI>Gnrez un fichier .h pour le fichier de classe  l'aide de
<B>JAVAH</B> :
<PRE>
     javah -jni MyNativeClass
</PRE>
<P>
On obtient le fichier <B>MyNativeClass.h</B>.
<P>
<LI>Crez un fichier .c pour mettre en oeuvre les fonctions dclares
dans le fichier MyNativeClass.h, et ajoutez une ligne pour inclure l'en-tte gnr.

<PRE>
#include "MyNativeClass.h"
</PRE>
<LI>Ecrivez les mthodes natives en langage C,  l'aide des points d'entre
du formulaire Java_<B>&lt;nomdeclasse&gt;_&lt;nomdemthode&gt;</B> :
<PRE>
/*
 * Class:     hello
 * Method:    demo
 * Signature: (java/lang/String;)
 */
JNIEXPORT void JNICALL Java_hello_demo
   (JNIEnv *ee, jobject o, jstring s)
{
}
</PRE>
<LI>
Gnrez un fichier de dfinitions de modules <B>javadef.def</B> :
<PRE>
LIBRARY INITINSTANCE
DATA MULTIPLE NONSHARED
CODE SHARED
</PRE>
<LI>Compilez le programme et dfinissez ses liens :
<PRE>
icc /Ge- /FeMyLib.dll MyNativeClass.c javadef.def javai.lib
</PRE>
<P>Le chemin de recherche INCLUDE doit comprendre :
<PRE>
    x:\JAVA11\include;x:\JAVA11\include\os2;
</PRE>
<P>Le chemin de recherche LIB doit comprendre :
<PRE>
    x:\JAVA11\lib;
</PRE>
o <B>x:\JAVA11</B> est l'unit et le rpertoire d'installation du composant
de dveloppement.
</OL>

<HR>
<H2><A NAME="Header_9A" HREF="#ToC_9A">Fichiers d'en-tte et fichiers source JAVAH</A></H2>
<P>
Vous pouvez accder aux objets Java  partir d'un programme C en utilisant
les fichiers d'en-tte et les fichiers source gnrs par <A HREF="#Header_7">JAVAH</A>.  Ces fichiers permettent d'accder aux variables
d'une instance d'objet.
<P>
<B>Remarque : Les DLL des mthodes natives Java
1.0.2 ne sont pas compatibles avec le Kit de dveloppement ; vous
devez les recompiler et redfinir les liens.
</B>
<P>
<B>Si vous souhaitez utiliser les DLL de mthodes natives Java
1.0.2 avec le Kit de dveloppement, vous devez recompiler et
redfinir les liens.</B>  Cette incompatibilit est lie
aux modifications du modle de mmoire Java, qui gnre un changement
de la macro <B>unhand()</B>. Le nom de la DLL de l'interprteur Java a
galement chang ; toutefois, cette modification est transparente pour les
dveloppeurs de mthodes natives, s'ils redfinissent les liens avec la
nouvelle version de <B>JAVAI.LIB</B>.

<P>
Le nouveau modle de mmoire Java permet de dplacer les
identificateurs et les objets lors de la rcupration de place en mmoire. Le
programme rcuprateur de place modifie les identificateurs qu'il
reconnat. Toutefois, si une mthode native a stock un
identificateur d'objet Java dans une mmoire statique ou C, le
programme ne peut pas le reconnatre ni le modifier. Dans ce cas, le
programme peut dplacer l'identificateur et annuler la rfrence de
la mthode native.
<P>
Pour empcher le programme rcuprateur de dplacer un identificateur spcifique,
appelez la mthode <B>pin_handle()</B> et transmettez-lui l'identificateur qui ne doit pas tre modifi.
Utilisez ensuite la mthode <B>unpin_handle()</B> pour autoriser le
dplacement de l'identificateur lors de la rcupration de place.

<P>
Pour utiliser sous OS/2 des mthodes natives en langage C ou C++
propres  une plateforme&nbsp;:
<OL>
<LI>Crez un fichier source de classe Java pour associer les mthodes
natives :
<PRE>
    class MyNativeClass
       {
         String x;
         ...
         public native void demo(String x);
         ...
         static { System.loadLibrary("MyLib"); }
       }
</PRE>
<P><B>Remarque : </B> La mthode System.loadLibrary
s'excute lors du premier appel de la classe et charge un fichier DLL MyLib
contenant les mthodes natives.
<P><LI>Gnrez un fichier .h pour le fichier de classe  l'aide de
<B>JAVAH</B> :
<PRE>
     javah MyNativeClass
</PRE>
<LI>Gnrez un fichier de raccord .c pour la classe  l'aide de <B>JAVAH</B> :
<PRE>
     javah -stubs MyNativeClass
</PRE>
<LI>Ecrivez vos propres mthodes natives en langage C  l'aide des points d'entre
du formulaire <B>&lt;nomdeclasse&gt;_&lt;nomdemthode&gt;</B> :
<PRE>
   void MyNativeClass_demo(struct Hjava_lang_String * x)
</PRE>
<LI>Compilez les fichiers C. Le chemin de recherche INCLUDE doit comprendre :
<PRE>
    x:\JAVA11\include;x:\JAVA11\include\os2;
</PRE>
o <B>x</B> est l'unit d'installation de Java.<P>
<LI>Dfinissez des liens
entre les fichiers C contenant les mthodes natives et le fichier de raccord C afin
de crer une DLL portant le nom indiqu dans l'instruction System.loadLibrary. Vous devez dfinir un lien avec la bibliothque Java
<B>x:\JAVA11\LIB\JAVAI.LIB</B> (ou la version de dbogage de la bibliothque
<B>JAVAI_G.LIB</B>) si vous avez utilis les fonctions d'aide du composant d'excution.

</OL>
<P>
Le composant d'excution Java utilise la convention d'appel VisualAge C _Optlink
pour appeler les mthodes natives dans les DLL.

<HR>
<H2><A NAME="Header_10" HREF="#ToC_10">Fichiers crits  l'aide de PrintStream</A></H2>
<P>
Si les donnes sont crites dans un fichier via la mthode <B>println()</B>
de la classe PrintStream, elles sont suivies de caractres de fin tablis par
la mthode <b>newLine()</b> de l'lment OutputStreamWriter
sous-jacent. La mthode <b>newLine()</b> utilise la proprit systme
de <B>sparateur de ligne</B> propose par la plateforme concerne.
Sur OS/2, il s'agit de la paire de caractres (x'0d0a').
<P>
Cette mthode constitue une nouveaut par rapport  JDK 1.0.2. En
effet, les fichiers crits via PrintStream utilisaient un caractre
unique de nouvelle ligne (x'0a') comme sparateur.
Cette rgle respecte les conventions Unix standard mais elle diffre
de la convention OS/2 o les donnes sont suivies d'une paire de
caractres (x'0d0a').
<P>Java lit indiffremment les donnes suivies par ces deux types de caractres.
<HR>
<H2><A NAME="Header_11" HREF="#ToC_11">Fonctionnement de
Java.lang.Class.forName()</A></H2>
<P>
<a
href="http://java.sun.com:80/docs/books/jls/clarify.html">Le
document qui fait tat des Eclaircissements et avenants concernant la
<I>Spcification de langage Java</I></a> prsente un changement dans
le fonctionnement de la mthode <b>Java.lang.Class.forName()</b>.
selon les termes suivants :
<P>
<I>JLS 20.3.8 doit mentionner qu'une classe appele "X" est
initialise suite  l'appel de la mthode java.lang.Class.forName("X").</I>

<P>
En ce qui concerne le Kit de dveloppement, la mthode
<b>Class.forName()</b> correspond  la spcification Sun
modifie et  la mise en oeuvre Sun de rfrence. La classe appele
"X" est maintenant initialise suite  l'appel de la mthode
java.lang.Class.forName("X").
<P>
Ce fonctionnement est implicite dans les exemples de Java Database
Connectivity (JDBC) qui utilisent la mthode <b>Class.forName()</b> pour
charger les pilotes JDBC ; ces pilotes sont gnralement utilisables
sur-le-champ.
Dans ces exemples, les initialiseurs statiques du
pilote JDBC sont lancs par la mthode <b>Class.forName()</b> afin que
le code de l'initialiseur statique du pilote puisse s'enregistrer
dans le gestionnaire de pilotes JDBC.

<HR>
<H2><A NAME="Header_12" HREF="#ToC_12">Caractres barre oblique
inverse et tilde dans les pays DBCS</A></H2>
<p>Certaines pages de codes DBCS (par exemple, 932, 942, 943 et 949)
n'ont pas de caractre barre oblique inverse ou tilde au code
caractre correspondant dans les autres pages de codes ASCII. Ce
cas est illustr dans les exemples ci-aprs.
<UL>
<LI>Dans la plupart des pages de codes ASCII, le code caractre
0x5c correspond  une barre oblique inverse et le code caractre
0x7e,  un tilde.
<LI>Dans les pages de codes 932, 942 et 943, le code caractre 0x5c
correspond au sigle du yen japonais et le code caractre 0x7e, 
un tiret suprieur.
<LI> Dans la page de codes 949, le code caractre 0x5c correspond au
sigle du won coren.
</UL>

<H3>Placement des caractres</H3>
<p>Le compilateur Java, javac, convertit d'abord le programme source
Java de la page de codes locale en Unicode. Il traite ensuite les
squences de caractres d'chappement, telles que \n, en lisant
le caractre 'barre oblique inverse', puis le caractre 'n' et en
les combinant en caractre d'chappement pour gnrer une nouvelle
ligne Unicode, U+000A, avant de compiler le programme.</p>

<p>Dans certaines instances, une difficult survient car la
barre oblique inverse (qui correspond au caractre 0x5C dans la page de
codes 850) ne se trouve pas  la mme position dans certaines pages
de codes DBCS. Par
exemple, dans la page de codes 943, le caractre 0x5C correspond au
symbole du yen. Si le compilateur javac convertit le code caractre
0x5c de la page de codes locale (symbole du yen) du programme source
Java en symbole du yen Unicode (U+00A5), aucune barre oblique
inverse n'est gnre et par consquent le systme ne traite aucune
squence de caractres d'chappement.</p>

<p>En outre, dans les pages de codes 932, 943 et 949, il n'existe
pas de barre oblique inverse et par consquent, les dveloppeurs ne
peuvent pas gnrer de barre oblique inverse Unicode (afin de
gnrer d'autres caractres Unicode  l'aide des squences de
caractres d'chappement Unicode) aprs la conversion de la page de
codes dans le compilateur javac.</p>

<H3>Tables de conversion</H3>

<p>Pour permettre aux dveloppeurs d'crire des programmes contenant
des barres obliques inverses, la machine JVM utilise les tables de
conversion des pages de codes modifies pour les pages de codes 932,
943 et 949. Ces pages de codes modifies convertissent les caractres 0x00  0x7F
dans la page de codes locale en caractres U+0000  U+007F dans Unicode.
Un dveloppeur peut alors utiliser le symbole du yen (0x5c) dans les
pages de codes 932 et 943 ou le symbole du won (0x5c) dans la page de
codes 949 pour reprsenter une barre oblique inverse (U+005C) dans
Unicode. Un tiret suprieur (0x7e) peut tre utilis dans les pages
de codes 932 et 943 pour reprsenter un tilde (U+007E) dans Unicode.</p>

<p>Ces tables de conversion des pages de codes modifies sont
galement utilises par dfaut pour la machine JVM lorsque cette
dernire fonctionne sous OS/2 dans les pages de codes 932, 943
et 949. Ces dernires sont utilises pour les classes PrintStream, PrintWriter,
OutputWriter et InputReader lorsqu'aucun codage de caractres
explicite n'a t spcifi.</p>

<p>Le caractre 0x5C peut tre imprim comme symbole du yen
dans la page de codes locale, mais si un dveloppeur d'applications
dsire un symbole du yen, il peut utiliser un caractre
d'chappement Unicode pour gnrer le caractre Unicode U+00A5. Cela
est utile d'une part pour rendre l'application compatible avec les
autres pages de codes et d'autre part, pour qu'Abstract Window
Toolkit (AWT) affiche le glyphe de caractre appropri. Il en
est de mme si le dveloppeur dsire utiliser un vrai tiret
suprieur ; le caractre Unicode U+203E doit alors tre utilis
dans le programme Java.</p>

<H3>Page de codes 942</H3>

<p>La page de codes 942 contient les caractres barre oblique
inverse et tilde, mais les codes caractres de ces derniers
sont diffrents de ceux des autres pages de codes. Cette page de
codes ne comportant pas de barre oblique inverse ni de tilde 
l'emplacement correspondant dans les autres pages de codes ASCII,
les convertisseurs de pages de codes modifies ne sont pas utiliss
par dfaut.</p>

<p>Les programmes crits dans cette page de codes peuvent
comporter des symboles barre oblique inverse et tilde dans la page
de codes locale. Si les programmes sont crits dans une autre page de
codes ASCII o la barre oblique inverse se trouve au code caractre
0x5C et que ces programmes doivent tre compils, vous devez, dans la
plupart des cas, utiliser l'une des mthodes ci-aprs pour qu'ils
fonctionnent correctement.</p>

       <ul>
       <li>Remplacer le caractre 0x5c du programme source Java par
           le caractre correspondant dans la page de codes locale
           (code caractre 0xfe).

        <li>Lors de la compilation de l'application ou de l'appliquette
            Java, indiquer que le fichier est crit dans une page de
            codes diffrente de la page de codes locale. Par exemple,
            si le code source a t crit dans la page de codes 850,
            utilisez la commande ci-aprs pour le compiler.
                <pre>javac  -encoding 850  myprogram.java</pre>
       </ul></p>

<p>Si le fichier a t crit avec les caractres DBCS de la page de
codes 942, en utilisant 0x5C pour reprsenter la barre oblique
inverse, l'option -encoding de javac peut tre utilise pour imposer
l'utilisation du codage de caractre Cp942c', qui convertit les
caractres 0x00  0x7F de la page de codes locale en caractres
U+0000  U+007F dans Unicode.
Par exemple :</p>

                <pre>javac  -encoding Cp942c myprogram.java</pre>

<p>Si le programme source a t crit dans la page de codes 942 en
utilisant une barre oblique inverse relle (code caractre 0xfe)
et qu'il doit tre compil sur un autre systme, utilisez le
programme native2ascii pour le convertir de la page de codes locale en
une page de codes ASCII de base. Par exemple :</p>

           <pre>native2ascii myprogram.java d:\mydest\myprogram.java</pre>

<p>Pour convertir une page de codes spcifique en une page de codes
ASCII de base, entrez la commande suivante :</p>

           <pre>native2ascii -encoding 942 myprogram.java d:\mydest\myprogram.java</pre>

<H3>Caractre sparateur de fichiers</H3>
<p>Dans la plupart des pages de codes ASCII sous OS/2, le sparateur
de fichiers est une barre oblique inverse.
Ce caractre est accessible dans tout programme Java  l'aide de la
proprit systme 'file.separator' ou de la constante statique
'java.io.File.separator'.</p>

<p>Dans les pages de codes 932 et 943, le sparateur de fichiers
correspond toujours au code caractre 0x5C, mais il prend
l'apparence du symbole du yen dans l'invite de commande. De
mme, dans la page de codes 949, le sparateur prend
l'apparence du symbole du won. Le convertisseur de caractres par
dfaut de ces pages de codes convertit le caractre file.separator
en barre oblique inverse dans Unicode, afin que l'application
Java puisse voir le sparateur de fichiers comme barre oblique
inverse Unicode (U+005C).</p>

<p>Dans la page de codes 942, le sparateur de fichiers local est
galement le yen, mais il est converti par le convertisseur de
caractres Java en symbole du yen Unicode, afin que l'application Java
peroive le sparateur de fichiers comme un symbole yen Unicode (U+00A5).</p>

<p>Afin que les applications Java fonctionnent sur tous les
systmes d'exploitation, les dveloppeurs d'application doivent
toujours utiliser la proprit systme file.separator. Ils
doivent galement veiller  ne pas entrer de sparateur de
chemin d'accs dans leurs programmes. </p>

       <p>Par exemple, n'utilisez pas :</p>

       <pre>FileInputStream x = new FileInputStream("mydir\myfile.ext");</pre>

       <p>Utilisez plutt :</p>

            <pre>FileInputStream x = new FileInputStream("mydir" + File.separator+ "myfile.ext");</pre>

<HR>
<H2><A NAME="Header_13" HREF="#ToC_13">Conversion entre ShiftJIS et
Unicode dans la version japonaise d'OS/2 Warp 4</A></H2>

<p>Dans l'environnement japonais, les tables de conversion des codes
ShiftJIS (codes PC) et Unicode ci-aprs sont disponibles.</p>

       <UL>
       <LI>SJIS
       <LI>Cp943C
       <LI>Cp943 = IBM-943
       <LI>Cp942 = IBM-942
       <LI>Cp942C
       </UL>

       <p>Les tables de conversion par dfaut du systme sont :</p>

         <UL>
         <li>Cp943C pour les pages de codes 943 et 932
         <li>Cp942 pour la page de codes 942
         </UL>

       <p>Pour utiliser la table Cp942, dfinissez le nom de cette
table de manire explicite dans une mthode ou dfinissez-la comme
paramtre. Ces tables effectuent les conversions suivantes :</p>


<H3>Pour les caractres SBCS</H3>
<TABLE BORDER=2 CELLSPACING=2 CELLPADDING=2 COLS=5>
<TR ALIGN=CENTER>
     <TD>&nbsp;
     <TD COLSPAN=2><b>Code PC</b>
     <TD COLSPAN=2><b>Unicode</b>
</TR>
<TR>
     <TD><b>Page de codes</b>
     <TD><b>Code caractre</b>
     <TD><b>Caractre</b>
     <TD><b>Code caractre</b>
     <TD><b>Caractre</b>
</TR>
<TR>
     <TD>SJIS
     <TD>0x00-0x7F
     <TD>Correspond  Unicode
     <TD>U0000-U007F
     <TD>Correspond au code PC
</TR>
<TR>
     <TD>Cp942C
     <TD COLSPAN=2>Correspond  Unicode
     <TD COLSPAN=2>Correspond au code PC

</TR>
<TR>
     <TD>Cp943C
     <TD COLSPAN=2>Correspond  Unicode
     <TD COLSPAN=2>Correspond au code PC

</TR>
<TR>
     <TD>Cp942
     <TD>0x00-0x5B
     <TD>Correspond  Unicode
     <TD>U0000-U005B
     <TD>Correspond au code PC
</TR>
<TR>
     <TD>Cp943
     <TD>0x5c
     <TD>Symbole du yen
     <TD>U00A5
     <TD>Symbole du yen
</TR>
<TR>
     <TD>
     <TD>0x5D-0x7D
     <TD>Correspond  Unicode
     <TD>U005D-U007D
     <TD>Correspond au code PC
</TR>
<TR>
     <TD>
     <TD>0x7e
     <TD>Tiret suprieur
     <TD>U203E
     <TD>Tiret suprieur
</TR>
<TR>
     <TD>
     <TD>0x7F
     <TD>Correspond  Unicode
     <TD>U007F
     <TD>Correspond au code PC
</TR>
<TR>
     <TD>
     <TD>0x80
     <TD>Symbole du cent
     <TD>U00A2
     <TD>Symbole du cent
</TR>
<TR>
     <TD>
     <TD>0xA0
     <TD>Symbole de la livre
     <TD>U00A3
     <TD>Symbole de la livre
</TR>
<TR>
     <TD>
     <TD>0xFD
     <TD>Ne correspond pas  un symbole
     <TD>U00A7
     <TD>Ne correspond pas  un symbole
</TR>
<TR>
     <TD>
     <TD>0xFE
     <TD>Barre oblique inverse
     <TD>U005C
     <TD>Barre oblique inverse
</TR>
<TR>
     <TD>
     <TD>0xFF
     <TD>Tilde
     <TD>U007E
     <TD>Tilde
</TR>
</table>
</p>
       <p>Par exemple, dans la table Cp943C, les codes PC 0x00  0x7F
       sont directement convertis en Unicode (U0000  U007F).
       Dans la table Cp942, le code PC reprsentant le yen (0x5c)
       est converti en symbole de yen Unicode (U00A5).</p>


       <p>Pour les caractres DBCS&nbsp;:</p>

        <UL>
       <LI>Dans les tables Cp943, Cp943C et SJIS, le code PC
        est considr comme le nouvel ordre JIS.
       <LI>Dans les tables Cp942 et Cp942C, le code PC
        est considr comme l'ancien ordre JIS.
</ul>

<p>Caractres dfinis par l'utilisateur et caractres tendu IBM&nbsp;:</p>
<UL>
<LI>Dans les tables Cp943 et Cp943C, ces codes PC sont convertis en Unicode.

       <LI>Dans la table SJIS, ces codes PC NE sont PAS convertis
en Unicode.

       <LI>Dans les tables Cp942 et Cp942C, ces codes PC sont
convertis en Unicode.
</UL>

<HR>
<H2><A NAME="Header_14" HREF="#ToC_14">Limitations connues</A></H2>
<UL>
<LI>
Le compilateur JIT ne permet pas d'obtenir de trace (option <B>-tm</B>) ou des
dfinitions de profil optimales de mthodes. Pour obtenir des traces et un
profil complets, vous devez dsactiver le compilateur. Pour plus d'informations, reportez-vous
 la section <A HREF=runtime.htm#JIT>Dsactivation du compilateur JIT</A>
dans la <A HREF=runtime.htm>documentation du composant d'excution</A>.
<P><LI>Lorsque le compilateur JIT est activ, une exception inattendue gnre
une trace sans numros de lignes source. Vous devez
<A HREF=runtime.htm#JIT>dsactiver le compilateur JIT</A>
et rexcuter l'application dfaillante pour obtenir la trace avec les numros de lignes.

</UL>
<HR>
<H2><A NAME="Header_15" HREF="#ToC_15">Remarques</A></H2>
<P>Marques
<P>Les termes qui suivent sont des marques d'International Business
Machines Corporation dans certains pays :
<UL>
<LI>IBM</LI>
<LI>OS/2</LI>
</UL>
<p>Les termes qui suivent sont des marques d'autres socits :
<UL>
<LI>Java et 100% Pure Java sont des marques de Sun Microsystems, Inc.
<LI> La technologie Java* est la proprit de Sun Microsystems
Inc., seule socit  pouvoir en accorder la licence. Java est une
marque de Sun Microsystems Inc. dans certains pays.
</UL>
<P>Copyrights
<UL>
<LI> (c) Copyright Sun Microsystems, Inc. 1992-1998. All rights reserved.
<LI> (c) Copyright IBM Corporation, 1996-1998. All rights reserved.
<LI> (c) Copyright IBM France, 1996-1998. Tous droits rservs.
<LI> Ce produit repose en partie sur le travail du groupe indpendant JPEG.
</UL>

</BODY></HTML>
