<!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>Development Environment per IBM OS/2 Warp Developer Kit, Java Edition</TITLE>
</HEAD><BODY BGCOLOR="FFFFFF">
<A NAME=Top_Of_Page> </A>

<center><H3>Development Environment per</H3>
<H4>IBM OS/2 Warp Developer Kit, Java Technology Edition, Versione 1.1.8</H4>
</center>

<P>
<B>IBM OS/2 Warp Developer Kit, Java Technology Edition, Versione
1.1.8 (Developer Kit)</B>
 basato sul livello di manutenzione Java 1.1.8 di Sun Microsystems.
In questo file viene illustrato l'utilizzo del componente
Toolkit di Developer Kit.
<HR>
<MENU>
<LI><A NAME=ToC_1  HREF="#Header_1 " >Installazione</A>
<LI><A NAME=ToC_2  HREF="#Header_2 " >La tag APPLET</A>
<LI><A NAME=ToC_16  HREF="#Header_16 " >Strumenti Java</A>
<UL>
<LI><A NAME=ToC_3  HREF="#Header_3 " > Compilatore</A>
<LI><A NAME=ToC_4  HREF="#Header_4 " >Strumenti dell'operazione di debug</A>
<UL>
<LI><A NAME=ToC_4A HREF="#Header_4A " >Programma di debug ICAT</A>
<LI><A NAME=ToC_4B HREF="#Header_4B " >Programma di debug 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 " >Accesso ad Oggetti Java da un programma in C</A>
<UL>
<LI><A NAME=ToC_9  HREF="#Header_9 " >JNI (Java Native Interface)</A>
<LI><A NAME=ToC_9A HREF="#Header_9A" >Intestazione e file origine JAVAH</A>
</UL>
<LI><A NAME=ToC_10 HREF="#Header_10 " >File scritti con PrintStream</A>
<LI><A NAME=ToC_11 HREF="#Header_11 " >Azioni di Java.lang.Class.forName()</A>
<LI><A NAME=ToC_12 HREF="#Header_12 " >Barra retroversa e tilde in paesi DBCS</A>
<LI><A NAME=ToC_13 HREF="#Header_13 " >Conversione tra ShiftJIS ed Unicode nella versione giapponese di OS/2 Warp 4</A>
<LI><A NAME=ToC_14 HREF="#Header_14" >Limitazioni note</A>
<LI><A NAME=ToC_15 HREF="#Header_15" >Informazioni particolari</A>
</MENU>

<HR><P>
<H2><A NAME="Header_1" HREF="#ToC_1">Installazione</A></H2>
<P>
Per informazioni aggiornate sull'installazione, consultare il file
Readme nella directory <B>\JAVA11</B>. Al termine
dell'installazione,  possibile reperire il file Readme nella directory
in cui sono stati decompressi i file di Developer Kit.</p>
<P>
Il componente Java Toolkit richiede l'installazione del componente
Java Runtime. E' necessario collocare il Toolkit in una partizione HPFS
o JFS.
E' possibile collegarsi a questo documento solo se i componenti
Runtime, Toolkit ed il programma di debug ICAT sono
installati nella stessa unit e directory.
</P>
<HR>
<H2><A NAME="Header_2" HREF="#ToC_2">La tag APPLET</A></H2>
<P>
La tag APPLET viene utilizzata per inserire un'applet
Java in una pagina HTML. L'applet viene eseguita quando la pagina
HTML viene caricata in un browser Web abilitato per Java.
Se il browser
Web riconosce la tag APPLET ma non riesce ad eseguire le
applet Java, viene visualizzato il testo indicato dall'attributo ALT. Per
avviare un'applet  anche possibile utilizzare il Programma di
visualizzazione applet fornito come parte del componente Java Runtime.
</P>
<H3>Sintassi della tag APPLET</H3>
<P>
Di seguito viene riportata la sintassi della tag APPLET:
<PRE>
    <B>&lt;APPLET</B>
    <B>   CODE      =  appletFile</B>   o <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>Questo attributo fornisce il nome del file che contiene la
    sottoclasse Applet compilata dell'applet. Tale file  relativo
    all'URL principale dell'applet e non pu essere univoco. Se
    OBJECT non  specificato, questo attributo  necessario.
<P><DT><B>OBJECT = serializedApplet
</B><DD>Questo attributo fornisce il nome del file che contiene la
    rappresentazione serializzata di un'applet. L'applet viene
    deserializzata, il metodo <b>init()</b> non viene richiamato
    Viene invece avviato il metodo <b>start()</b>. Qualsiasi attributo fornito a
    tale applet viene reso disponibile all'applet stessa. Si
    consiglia un uso limitato di questa funzione, poich
    prima di serializzare un'applet,  necessario interromperla.
Se
    CODE non  specificato, questo attributo  necessario.
<P><DT><B>CODEBASE = codebaseURL</B>
<DD>Questo attributo facoltativo indica la directory in cui 
    contenuto il codice per l'applet. Se non si specifica tale
    attributo, viene utilizzato l'URL del documento.
<P><DT><B>ARCHIVE = archiveList</B>
<DD>Questo attributo facoltativo indica uno o pi archivi nei
    quali sono contenute le classi ed altre risorse che devono essere
    precaricate. Le classi vengono caricate utilizzando l'istanza di
    un AppletClassLoader con il CODEBASE fornito. Gli archivi
    contenuti in archiveList sono separati da virgole (<B>,</B>).
    Molte tag APPLET con lo stesso CODEBASE condividono la
    stessa istanza di AppletClassLoader.
<P><DT><B>ALT = alternateText
</B><DD>Questo attributo facoltativo indica il testo che deve
    essere visualizzato nel caso il browser riconosca la tag
    APPLET ma non riesca ad avviare le applet Java.
<P><DT><B>NAME = appletInstanceName
</B><DD>Questo attributo facoltativo indica un nome per l'istanza
    dell'applet, il che rende possibile per le applet presenti sulla
    stessa pagina riconoscersi e comunicare tra loro.
<P><DT><B>WIDTH = pixels
</B><DD>Questo attributo obbligatorio indica la larghezza iniziale
    in pixel dell'area di visualizzazione dell'applet, senza tenere
    conto delle finestre o delle caselle di dialogo richiamate
    dall'applet stessa.
<P><DT><B>HEIGHT = pixels
</B><DD>Questo attributo obbligatorio indica l'altezza iniziale
    in pixel dell'area di visualizzazione dell'applet, senza tenere
    conto delle finestre o delle caselle di dialogo richiamate
    dall'applet stessa.
<P><DT><B>ALIGN = alignment
</B><DD>Questo attributo indica l'allineamento dell'applet.
    I valori possibili per questo attributo sono gli stessi valori
    relativi alla IMG in HTML: left, right, top, texttop,
    middle, absmiddle, baseline, bottom, absbottom.
<P><DT><B>VSPACE = pixels
</B><DD>Questo attributo indica il numero di pixel al di sopra e
    al di sotto dell'applet. Viene utilizzato nello stesso modo
    dell'attributo VSPACE nella tag IMG in HTML.
<P><DT><B>HSPACE = pixels
</B><DD>Questo attributo indica il numero di pixel su ciascun lato dell'applet. 
    Viene utilizzato nello stesso modo
    dell'attributo HSPACE nella tag IMG in HTML.
<P><DT><B>&lt; PARAM NAME = appletAttribute1 VALUE = appletValue1 &gt; ...
</B><DD>Questa  l'unica tag che consente di indicare un attributo
    specifico dell'applet.
    Le applet richiamano i loro attributi mediante il metodo
    <B>getParameter( )</B>.
</DL>
<H3>Esempio della tag APPLET</H3>
<P>
Questo esempio indica le modalit di codifica della tag
APPLET per l'avviamento di un'applet nella classe
MyApplet in una finestra con 320 pixel di larghezza e 120 di altezza. 
All'applet vengono forniti due parametri, <B>mynumber</B> e
<B>mytext</B> e, nel caso la pagina HTML venga visualizzata con un
browser non abilitato all'uso di applet Java, viene visualizzato
il testo specificato dall'attributo ALT:
<PRE>
   &lt;applet code="MyApplet.class" width=320 height=120
           alt="In questo punto, nei browser abilitati all'uso di
           Java, viene visualizzata un'applet."&gt;
   &lt;param name=mynumber value="42"&gt;
   &lt;param name=mytext   value="Fido 3"&gt;
   &lt;/applet&gt;
</PRE>
<p>
E' possibile accedere ai parametri <B>mynumber</B> e <B>mytext</B>
mediante la classe MyApplet, richiamando il metodo <B>getParameter()</B>. E'
possibile gestire il parametro <B>mynumber</B> nel seguente modo:
<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">Strumenti Java</A></H2>
<p>Nelle sezioni che seguono vengono illustrati gli strumenti Java
disponibili per la scrittura e il debug dei programmi Java.
</p>

<HR>
<H3><A NAME="Header_3" HREF="#ToC_3"> Compilatore</A></H3>
<P>
Il <B></B>compilatore converte i codici origine Java in codici di
byte Java, che verranno successivamente letti ed eseguiti
dall'interprete Java.
Il codice origine  contenuto nei file con estensione <B>.java</B>. Il
compilatore memorizza il proprio output di codice di byte
in un file con lo stesso nome del file origine ma con estensione
<B>.class</B>.

<P>
Il compilatore viene avviato con una dimensione heap dell'interprete
Java pari a 8 MB e dispone di una quantit di heap massima di 16 MB. Se
la quantit di heap non  sufficiente,  possibile indicare una
dimensione maggiore mediante l'opzione <B>-mx</B> dell'interprete Java.
L'opzione <B>-J</B> in <B>JAVAC</B> viene utilizzata per
inoltrare l'opzione all'interprete Java. L'esempio riportato di seguito indica l'istruzione per la
compilazione di LargeClass.java con una dimensione di heap pari a 100 MB:
<PRE>
        javac -J-mx100m LargeClass.java
</PRE>
<HR>
<H3><A NAME="Header_4" HREF="#ToC_4">Strumenti dell'operazione di debug</A></H3>
<P>
Developer Kit fornisce due strumenti per eseguire il debug Java:
<UL>
<LI><A HREF="#Header_4A " >Programma di debug ICAT</A>
 un programma di debug a livello origine che viene eseguito in
ambiente OS/2 Warp. Fornisce la funzione di debug
locale o remota delle applicazioni Java.
<LI><A HREF="#Header_4B " >Il programma di debug Java (JDB)</A>,
fornito su piattaforme 100% Pure Java,  un programma della riga
comandi per il debug delle classi Java.
</UL>
<H3>Opzioni del compilatore di debug</H3>
<P>
Durante la compilazione delle applicazioni Java specificare
l'opzione <B>-g</B> per abilitare le tabelle relative alla funzione di debug.
Tali tabelle contengono le informazioni relative ai numeri di riga e
alle variabili locali necessarie per i programmi di debug.
<P>
E' possibile ottenere ulteriori informazioni sull'operazione di debug
con JDB indicando l'opzione <B>-O</B>. In tal modo, vengono abilitati i
metodi statico, privato e finale in linea.
Non utilizzare questa opzione con il Programma di debug ICAT per il Developer
Kit poich il codice in linea non consente la corretta visualizzazione
dei numeri di riga di origine.
<P>
Una classe compilata con informazioni relative all'operazione di
debug risulta pi ampia di una classe compilata senza tali
informazioni.
<H3>Interfaccia del loopback TCP/IP</H3>
<P>
Per eseguire il debug di un'applicazione Java in
esecuzione sulla stessa macchina del programma di debug,
 necessario che l'interfaccia del loopback TCP/IP sia attiva. 
Per verificare ci, immettere quanto
segue in una richiesta comandi dell'OS/2:
<PRE>
        ifconfig lo
</PRE>
Se l'interfaccia  attiva, vengono visualizzate informazioni simili
a quelle riportate di seguito:
<PRE>
lo: flags=809&lt;UP,LOOPBACK&gt;
         inet 127.0.0.1 netmask xff000000
</PRE>
Altrimenti, verranno visualizzate informazioni simili alle seguenti:
<PRE>
lo: flags=808&lt;LOOPBACK&gt;
</PRE>
Se l'interfaccia del loopback TCP/IP non  attiva,  possibile
avviarla immettendo quanto segue in una richiesta
comandi di OS/2:
<PRE>
        ifconfig lo 127.0.0.1 up
</PRE>
<P>
Per attivare questa interfaccia automaticamente,
aprire la  cartella TCP/IP e l'oggetto relativo alla
configurazione del protocollo TCP/IP. 
In base alla versione di TCP/IP in uso,  possibile aprire l'oggetto
configurazione TCP/IPdigitando quanto segue in una richiesta comandi OS/2:
<UL>
<LI><B>TCPCFG</B> per la versione 4.0 o precedente</LI>
<LI><B>TCPCFG2</B> per la versione 4.1 o successiva</LI>
</UL>
Dopo avere aperto l'oggetto Configurazione TCP/IP, fare clic
su <B>Rete</B>.
Selezionare <B>Interfaccia loopback</B> come interfaccia
da configurare e <B>Attivare interfaccia</B>.  In una richiesta
comandi OS/2 indicare l'indirizzo IP <B>127.0.0.1</B>. Chiudere la configurazione TCP/IP e salvare le modifiche,
quando richiesto.
</P>

<HR>
<H3><A NAME="Header_4A" HREF="#ToC_4A">Programma di debug ICAT</A></H3>
<P>
IBM ICAT (Interactive Code Analysis Tool) Java per OS/2 consente il
debug in applicazioni Java per OS/2 e ne fornisce
le chiamate mediante il metodo originario, codice C o C++ contenuto
in un file DLL (dynamic load library) di OS/2. Il Programma di debug
ICAT,  agendo sull'origine, utilizza PM (Presentation Manager)
di OS/2 per il proprio spazio di presentazione ed esegue il motore
per il debug al di fuori di JVM (Java Virtual Machine).
<P>
Informazioni dettagliate sul programma di debug
sono reperibili nella <A HREF=icatjava\help\icatjava.htm>documentazione sul programma di debug ICAT per Developer Kit</A>.
<HR>
<H3><A NAME="Header_4B" HREF="#ToC_4B">Programma di debug Java (JDB)</A></H3>
<P>
<B>JDB</B>  un programma di debug della riga comandi per le classi Java.
Il programma di debug Java
viene avviato in sostituzione del programma interprete di Java.
E' possibile ottenere un elenco dei comandi disponibili ed una breve
descrizione relativa a ciascuno di essi indicando
<B>Aiuto</B> o <B>?</B> in una richiesta comandi OS/2 dopo
avere attivato il programma di debug.
<HR>
<H3><A NAME="Header_5" HREF="#ToC_5">JAVAP</A></H3>
<P>
<B>JAVAP</B> scompone un file di classe Java e, a seconda
delle opzioni indicate, visualizza una serie di informazioni relative
al file che comprendono:
<ul>
<li>Numeri di riga e tabelle della variabile locale
<li>Codice scomposto
<li>Metodi e variabili pubbliche
<li>Metodi e variabili private
</ul>
</p>
<p>
Digitando <B>JAVAP</B> senza specificare opzioni in una riga
comandi OS/2, viene visualizzato l'elenco di opzioni.
</p>
<HR>
<H3><A NAME="Header_6" HREF="#ToC_6">JAVADOC</A></H3>
<P>
Il comando <B>JAVADOC</B> genera una serie di pagine HTML in base alle
dichiarazioni e ai commenti contenuti nei file origine Java. JAVADOC visualizza tutte le dichiarazioni pubbliche e protette per
classi, interfaccia, metodi e variabili.
E' possibile assegnare al comando JAVADOC un nome pacchetto o un
elenco di file origine Java.</P>

<p><b>Nota:</b> Vengono utilizzati i file origine (.java);
non vengono utilizzati i file di classe (.class).
</p>

<p>
Digitando <B>JAVADOC</B> senza specificare opzioni in una riga
comandi OS/2, viene visualizzato l'elenco di opzioni.
</p>
<HR>
<H3><A NAME="Header_7" HREF="#ToC_7">JAVAH</A></H3>
<P>
Il comando <B>JAVAH</B> crea file di intestazione C e file
origine C da una classe Java.
Questi file vengono utilizzati per
<A HREF="#Header_9A">accedere agli oggetti Java da un programma C</A>.
</p>
<HR>
<H2><A NAME="Header_8" HREF="#ToC_8">Accesso ad Oggetti Java da un programma in C</A></H2>
<P>
E' possibile accedere ad oggetti Java da un programma in
C nativo o in C++ in uno dei due modi riportati di seguito:
<UL>
<LI><A HREF="#Header_9 " >JNI (Java Native Interface)</A>
<LI><A HREF="#Header_9A" >Intestazione e file origine JAVAH</A>
</UL>
<P>
JNI, il nuovo componente di Java, 1.1.1, fornisce un'interfaccia per i
metodi nativi pi stabile di quella dell'intestazione e dei file origine JAVAH.

<P>
<H3>Considerazioni generali sulla programmazione</H3>
<UL>
<LI>JVM modifica il controllo di unit della
virgola mobile per
eliminare delle eccezioni della virgola mobile. I metodi nativi che modificano
l'istruzione di controllo in virgola mobile, devono
salvare il contenuto dell'istruzione di controllo in entrata e ripristinarlo
in uscita dal metodo nativo.

<P><LI>In OS/2 Warp Server, Versione 4 precedente al FixPak
31 ed OS/2 Warp Server SMP precedente al FixPak 31, non  supportata
la chiamata API DosQueryThreadContext.
Ci significa che JVM deve utilizzare un meccanismo di sospensione
volontaria per il raggruppamento di blocchi sparsi di memoria. Tale
meccanismo richiede che tutti i sottoprocessi di
Java effettuino una ricerca periodica della richiesta di sospensione. Il meccanismo non funzioner ed il raggruppamento di blocchi
sparsi di memoria non sar possibile, se il metodo nativo effettua una
sospensione forzata e indeterminata.
<P>In OS/2 Warp 4 questo meccanismo verr sostituito con un altro
pi potente; tuttavia, per esigenze di compatibilit durante
l'esecuzione delle applicazioni su tutte le versioni OS/2
supportate,  opportuno che i metodi nativi non attendano
per pi di uno o due secondi.
<P>
Gli elementi di chiamata possono partecipare al processo di
sospensione volontaria suddividendo le attese forzate all'esterno
dell'ambiente Java in una serie di attese di breve durata (&lt;
0,5 secondi) mediante una chiamata all'istruzione
<b>ThreadCheckForSuspend()</b> emessa tra un'attesa e l'altra. Ad esempio, 
possibile sostituire il codice riportato di seguito:
<PRE>
      rc = DosRequestMutexSem( mutex, SEM_INDEFINITE_WAIT);
</PRE>con:<PRE>
      do
      {
        rc = DosRequestMutexSem( mutex, 250L );
        if (rc == ERROR_TIMEOUT) ThreadCheckForSuspend();
      } while (rc == ERROR_TIMEOUT);
</PRE>
<P>
La definizione originaria per la chiamata
ThreadCheckForSuspend  la seguente:
<PRE>
       void ThreadCheckForSuspend (void);
</PRE>
<LI>Per evitare possibili conflitti di nomi DLL, utilizzare
nomi DLL che non inizino con la stringa <B>JAVA</B>.

</UL>
<HR>
<H2><A NAME="Header_9" HREF="#ToC_9">JNI (Java Native Interface)</A></H2>
<P>
E' possibile accedere agli oggetti Java da un programma in C
usando JNI (Java Native Interface) mai utilizzata prima con Java
1.1.1. Tale interfaccia  pi stabile di quella
disponibile con <A HREF="#Header_9A">i file di intestazione e
origine JAVAH</A>.
<P>
Per creare metodi nativi specifici per piattaforme in
C o C++ utilizzando l'interfaccia JNI in OS/2, procedere nel modo
seguente:

<OL>
<LI>Creare un file origine di classe Java da inserire nei metodi
nativi:
<PRE>
    class MyNativeClass
       {
         String x;
         ...
         public native void demo(String x);
         ...
         static { System.loadLibrary("MyLib"); }
       }
</PRE>
<P><B>Nota: </B>Il metodo <b>System.loadLibrary</b> viene eseguito la
prima volta in cui viene richiamata la classe e carica una DLL denominata
MyLib che deve contenere i metodi nativi.
<P><LI>Generare un file .h come file di classe utilizzando <B>JAVAH</B>:
<PRE>
     javah -jni MyNativeClass
</PRE>
<P>
Ci consente la creazione del file <B>MyNativeClass.h</B>.
<P>
<LI>Creare un file .c per ottenere le funzioni indicate
nel file MyNativeClass.h e aggiungere una riga per includere
l'intestazione generata.
<PRE>
#include "MyNativeClass.h"
</PRE>
<LI>Scrivere i metodi nativi in C utilizzando punti di entrata in formato
Java_<B>&lt;class name&gt;_&lt;method name&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>
Generare un file di definizione modulo, <B>javadef.def</B>,
nel seguente modo:
<PRE>
LIBRARY INITINSTANCE
DATA MULTIPLE NONSHARED
CODE SHARED
</PRE>
<LI>Compilare e creare i collegamenti del programma nel modo
seguente:
<PRE>
icc /Ge- /FeMyLib.dll MyNativeClass.c javadef.def javai.lib
</PRE>
<P>Il percorso di ricerca INCLUDE deve contenere:
<PRE>
    x:\JAVA11\include;x:\JAVA11\include\os2;
</PRE>
<P>ed il percorso di ricerca LIB deve contenere:
<PRE>
    x:\JAVA11\lib;
</PRE>
dove <B>x:\JAVA11</B> indica l'unit e la directory in
cui  stato installato il componente
Java Toolkit.
</OL>

<HR>
<H2><A NAME="Header_9A" HREF="#ToC_9A">Intestazione e file origine JAVAH</A></H2>
<P>
E' possibile accedere agli oggetti Java da un programma in
C utilizzando i file origine e l'intestazione in C
creati mediante
<A HREF="#Header_7">JAVAH</A>. Tali file consentono di accedere
alle variabili di istanza di un oggetto.
<P>
<B>Nota: Le DLL del metodo nativo di Java 1.0.2 non sono compatibili
con Developer Kit e devono essere ricompilate e ricollegate.
</B>
<P>
<B>Le DLL del metodo nativo di Java 1.0.2 devono essere ricompilate e
ricollegate prima di essere utilizzate con
Developer kit</B>. Questo processo  necessario a causa delle modifiche alla
macro <B>unhand()</B> apportate nel modello heap di Java. Anche il nome della DLL dell'interprete
Jav Runtime  stato modificato; ci risulta ininfluente per
gli sviluppatori di metodi nativi se viene rieseguito il collegamento
alla nuova versione di <B>JAVAI.LIB</B>.

<P>
Il nuovo modello heap di Java consente lo spostamento
degli handle e degli oggetti durante il raggruppamento dei blocchi
sparsi di memoria (garbage collection). Il garbage collector
modifica gli
handle che riconosce. Tuttavia, se un metodo nativo ha memorizzato un
handle di oggetto Java in memoria statica o su un heap C, il
garbage collector non riconosce l'handle e non pu modificarlo. In tal caso, il garbage collector potrebbe spostare
l'handle ed invalidare il riferimento memorizzato mediante il metodo
nativo.
<P>
Per evitare che il garbage collector sposti un determinato
handle, richiamare il metodo
<B>pin_handle()</B> e passare all'handle che non deve essere
spostato.
Al termine dell'operazione, utilizzare il metodo
<B>unpin_handle()</B>; in tal modo, il garbage collector sar in
grado di spostare l'handle.

<P>
Per utilizzare i metodi nativi specifici per piattaforme in
C o C++ in OS/2, procedere nel modo seguente:
<OL>
<LI>Creare un file origine di classe Java da inserire nei metodi
nativi:
<PRE>
    class MyNativeClass
       {
         String x;
         ...
         public native void demo(String x);
         ...
         static { System.loadLibrary("MyLib"); }
       }
</PRE>
<P><B>Nota: </B>Il metodo System.loadLibrary viene eseguito la
prima volta in cui viene richiamata la classe e carica una DLL
denominata MyLib che deve contenere i metodi nativi.
<P><LI>Generare un file .h come file di classe utilizzando <B>JAVAH</B>:
<PRE>
     javah MyNativeClass
</PRE>
<LI>Generare un file stub .c come file di classe utilizzando
<B>JAVAH</B>:
<PRE>
     javah -stubs MyNativeClass
</PRE>
<LI>Scrivere i metodi nativi in C utilizzando punti di entrata di
formato <B>&lt;class name&gt;_&lt;method name&gt;</B>:
<PRE>
   void MyNativeClass_demo(struct Hjava_lang_String * x)
</PRE>
<LI>Compilare i file in C. Il percorso di ricerca INCLUDE deve
contenere la seguente istruzione:
<PRE>
    x:\JAVA11\include;x:\JAVA11\include\os2;
</PRE>
dove <B>x</B> indica l'unit in cui  stato installato
Java.<P>
<LI>Collegare i file in
C contenenti i metodi nativi con il file stub in C in modo da creare
una DLL con il nome specificato nell'istruzione
System.loadLibrary. Se  stata utilizzata una funzione di aiuto
Java Runtime,  necessario collegarsi alla libreria Java
<B>x:\JAVA11\LIB\JAVAI.LIB</B> o alla versione di debug nella
libreria, <B>JAVAI_G.LIB</B>.

</OL>
<P>
Java Runtime utilizza la convenzione IBM VisualAge C _Optlink
per effettuare chiamate ai metodi nativi nelle DLL.
<HR>
<H2><A NAME="Header_10" HREF="#ToC_10">File scritti con PrintStream</A></H2>
<P>
I record scritti in un file utilizzando il metodo <B>println()</B>
nella classe PrintStream terminano con il metodo <b>newLine()</b> di
OutputStreamWriter. Il metodo <b>newLine()</b> utilizza la propriet
di sistema
<B>line.separator</B> appropriata per la piattaforma, che in OS/2 
costituita dalla coppia di caratteri (x'0d0a').
<P>
Ci costituisce una modifica rispetto a JDK 1.0.2., dove per scrivere su un file
con PrintStream, veniva utilizzato un carattere con una singola
riga (x'0a') come separatore di riga.
Ci  conforme alle convenzioni UNIX standard, ma differisce dalle
convenzioni OS/2 in cui i record terminano con i caratteri (x'0d0a').
<P>Java legge in maniera corretta entrambi i tipi di record.
<HR>
<H2><A NAME="Header_11" HREF="#ToC_11">Azioni di
Java.lang.Class.forName()</A></H2>
<P>
<a href="http://java.sun.com:80/docs/books/jls/clarify.html">Clarifications and Amendments to
<I>The Java Language Specification</I></a> illustra le
modifiche apportate alle funzioni di <b>Java.lang.Class.forName()</b>.
In questo documento viene affermato quanto segue:
<P>
<I>JLS 20.3.8 riporta che una chiamata a
java.lang.Class.forName("X") provoca l'inizializzazione della classe
denominata "X".</I>

<P>
Per Developer Kit le funzioni di
<b>Class.forName()</b> corrispondono alla modifica apportata alle
specifiche e ai riferimenti della Sun. Una chiamata a
java.lang.Class.forName("X") provoca, quindi, l'inizializzazione
della classe denominata "X".
<P>
Questa funzione  implicitamente assunta negli esempi JDBC (Java
Database Connectivity) che utilizzano <b>Class.forName()</b> per
caricare i  programmi di controllo JDBC e prevedono l'utilizzo
immediato del programma di controllo JDBC.
Gli esempi prevedono che gli inizializzatori statici nel programma di
controllo JDBC vengano eseguiti da <b>Class.forName()</b> in modo che il
codice dell'inizializzatore statico nel programma di controllo possa
eseguire la registrazione mediante il programma di gestione del programma di controllo JDBC.
<HR>
<H2><A NAME="Header_12" HREF="#ToC_12">Barra retroversa e tilde in paesi DBCS</A></H2>
<p>In alcune code page DBCS (ad esempio, 932, 942, 943,
949) i caratteri barra retroversa e tilde presentano una codifica
diversa dalle code page ASCII.
Ad esempio:
<UL>
<LI>Nella maggior parte delle code page ASCII la codifica
0x5c rappresenta la barra retroversa e 0x7e rappresenta la tilde.
<LI>Nelle code page 932, 942 e 943, la codifica 0x5c rappresenta il
simbolo dello Yen giapponese, 0x7e il carattere overline.
<LI> Nella code page 949, la codifica 0x5c rappresenta il simbolo
Won coreano.
</UL>

<H3>Posizione dei caratteri</H3>
<p>Il compilatore Java, javac, converte il programma nativo
Java dalla code page locale in Unicode. Poi elabora le sequenze di
caratteri, ad esempio \n, leggendo il carattere barra retroversa,
quindi la 'n' e li combina per creare una nuova riga Unicode,
U+000A, prima di compilare il programma.</p>

<p>In alcuni casi, il carattere barra retroversa (0x5C nella code page 850)
in alcune code page DBCS ha una collocazione diversa.
Ad esempio, nella code page 943,
0x5C rappresenta lo Yen. Se il compilatore javac converte
la codifica 0x5c nella code page locale
(simbolo dello Yen) nel programma nativo Java nel simbolo dello
Yen Unicode (U+00A5),
non vi sar alcuna barra retroversa, pertanto non verr eseguita
alcuna elaborazione di sequenza di caratteri.
</p>

<p>Inoltre, le code page locali 932, 943 e
949 non dispongono di barra retroversa. Pertanto il programmatore non
potr generare la barra retroversa per creare altri caratteri
Unicode mediante le sequenze di caratteri Unicode in seguito alla
conversione di code page nel compilatore javac.</p>

<H3>Tabelle di conversione</H3>

<p>Per consentire ai programmatori di scrivere dei programmi
contenenti la barra retroversa, JVM utilizza tabelle di
conversione di code page modificate per le code page
932, 943 e 949. Queste tabelle modificate
spaziano da 0x00 a 0x7F nella code page locale
U+0000 e U+007F in Unicode.
Ci significa che il programmatore pu utilizzare il simbolo dello
Yen (0x5c) nelle code page 932 e 943 e il simbolo Won
(0x5c) nella code page 949 per rappresentare il carattere
barra retroversa (U+005C) in Unicode. Il carattere overline
(0x7e) nelle code page 932 e 943 pu essere utilizzato per
rappresentare la tilde (U+007E) in Unicode.</p>

<p>Queste tabelle di conversione di code page modificate vengono
inoltre utilizzate come valori predefiniti per JVM per l'esecuzione
delle code page 932, 943 e 949 in OS/2. Esse vengono utilizzate per
le classi PrintStream, PrintWriter, OutputWriter
e InputReader se non si specifica una codifica di caratteri
esplicita.
</p>

<p>Sebbene 0x5C nella code page locale pu essere reso come simbolo
dello Yen, se il programmatore dell'applicazione desidera il simbolo
dello Yen,  necessario utilizzare un carattere
Unicode per creare un carattere Unicode U+00A5. Ci  necessario per
utilizzare l'applicazione con altre code page e per far s che
AWT (Abstract Window Toolkit) visualizzi il carattere correttamente.
Simili considerazioni si applicano se il programmatore desidera un
reale carattere overline. In tal caso,  necessario utilizzare il
carattere Unicode U+203E nel programma Java.
</p>

<H3>Code Page 942</H3>

<p>La code page 942 dispone dei caratteri barra retroversa e tilde,
presenta tuttavia una codifica diversa rispetto ad altre code page.
Poich questa code page dispone dei caratteri barra retroversa e
tilde, sebbene in posizioni diverse rispetto ad altre code page
ASCII, i convertitori di code page modificate non vengono utilizzati
per impostazione predefinita.
</p>

<p>I programmi in questa code page possono essere
scritti utilizzando i simboli reali della barra retroversa e
della tilde nella code page locale.
Se si desidera compilare i programmi scritti in un'altra code page ASCII
in cui la codifica per la barra retroversa  rappresentata da
0x5C, utilizzare uno dei seguenti metodi:
</p>

       <ul>
       <li>Sostituire il carattere 0x5c nel programma nativo
           Java con il carattere barra retroversa nella code page locale
           (codifica 0xfe).

        <li>Durante la compilazione di applicazioni o applet Java,
            indicare che il file  scritto in una code page diversa da
            quella locale.
            Ad esempio, se il codice origine  scritto in code page
            850, per compilarlo utilizzare il seguente comando:

                <pre>javac  -encoding 850  myprogram.java</pre>
       </ul></p>

<p>Se il file  scritto con caratteri DBCS in code page
942, utilizzando 0x5C per rappresentare la barra retroversa,
l'opzione -encoding di javac pu essere utilizzata per forzare l'uso
della codifica di caratteri Cp942c',
che spazia da 0x00 a 0x7F nella code page locale, a U+0000 e U+007F
in Unicode.
Ad esempio:</p>

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

<p>Se il programma nativo  scritto in code page
942 utilizzando il simbolo reale della barra retroversa
(codifica 0xfe) ed  necessario compilarlo su un altro sistema,
utilizzare il programma native2ascii per convertire il programma
nativo Java dalla code page locale in una code page ASCII di base.
Ad esempio:</p>

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

<p>Per eseguire la conversione da una determinata code page in una
code page ASCII di base:
</p>

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

<H3>Il carattere di separazione di file</H3>
<p>Il carattere di separazione di file nella maggior parte delle code
page ASCII in OS/2  la barra retroversa.
E' possibile accedere al carattere di separazione di file in un
programma Java utilizzando la propriet di sistema
'file.separator' o la costante statica 'java.io.File.separator'.</p>

<p>Nelle code page 932 e 943, il carattere di separazione di file 
ancora la codifica 0x5C, tuttavia in una richiesta comandi viene
visualizzato come simbolo dello Yen.
Allo stesso modo, nella code page 949, il carattere di separazione
viene visualizzato come simbolo Won. Il convertitore di caratteri
predefinito per queste code page converte il carattere
file.separator in una barra retroversa in Unicode.
Pertanto, l'applicazione Java vede il separatore di file
come barra retroversa Unicode (U+005C).</p>

<p>Anche nella code page 942, il separatore di file locale  il
simbolo dello Yen. Tuttavia, esso  convertito dal convertitore di
caratteri Java nel simbolo dello Yen in Unicode. Pertanto,
l'applicazione Java vede il carattere di separazione di file
come un simbolo dello Yen Unicode (U+00A5).</p>

<p>Per utilizzare le applicazioni Java in tutti i sistemi operativi,
utilizzare sempre la propriet di sistema file.separator. E'
necessario che i programmatori di applicazioni non
inseriscano separatori di percorso all'interno dei programmi.
</p>

       <p>Ad esempio, non utilizzare:</p>

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

       <p>Utilizzare altres:</p>

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

<HR>
<H2><A NAME="Header_13" HREF="#ToC_13">Conversione tra ShiftJIS e Unicode nella versione giapponese di OS/2 Warp 4</A></H2>

<p>Per il giapponese sono disponibili le seguenti tabelle di
conversione per la codifica ShiftJIS (codifica PC) e Unicode:
</p>

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

       <p>Sono elencate di seguito le tabelle di conversione di
          sistema predefinite:
</p>

         <UL>
         <li>Cp943C per code page 943 e 932
         <li>Cp942 per code page 942
         </UL>

       <p>Per utilizzare la tabella Cp942, impostare il nome della
          tabella in un metodo o come parametro.
          Queste tabelle consentono di eseguire le seguenti conversioni:
</p>


<H3>Per caratteri SBCS</H3>
<TABLE BORDER=2 CELLSPACING=2 CELLPADDING=2 COLS=5>
<TR ALIGN=CENTER>
     <TD>&nbsp;
     <TD COLSPAN=2><b>Codifica PC</b>
     <TD COLSPAN=2><b>Unicode</b>
</TR>
<TR>
     <TD><b>Code Page</b>
     <TD><b>Codifica</b>
     <TD><b>Carattere</b>
     <TD><b>Codifica</b>
     <TD><b>Carattere</b>
</TR>
<TR>
     <TD>SJIS
     <TD>0x00-0x7F
     <TD>Corrispondente ad Unicode
     <TD>U0000-U007F
     <TD>Corrispondente a codifica PC
</TR>
<TR>
     <TD>Cp942C
     <TD COLSPAN=2>Corrispondente ad Unicode
     <TD COLSPAN=2>Corrispondente a codifica PC

</TR>
<TR>
     <TD>Cp943C
     <TD COLSPAN=2>Corrispondente ad Unicode
     <TD COLSPAN=2>Corrispondente a codifica PC

</TR>
<TR>
     <TD>Cp942
     <TD>0x00-0x5B
     <TD>Corrispondente ad Unicode
     <TD>U0000-U005B
     <TD>Corrispondente a codifica PC
</TR>
<TR>
     <TD>Cp943
     <TD>0x5c
     <TD>Simbolo dello Yen
     <TD>U00A5
     <TD>Simbolo dello Yen
</TR>
<TR>
     <TD>
     <TD>0x5D-0x7D
     <TD>Corrispondente ad Unicode
     <TD>U005D-U007D
     <TD>Corrispondente a codifica PC
</TR>
<TR>
     <TD>
     <TD>0x7e
     <TD>Overline
     <TD>U203E
     <TD>Overline
</TR>
<TR>
     <TD>
     <TD>0x7F
     <TD>Corrispondente ad Unicode
     <TD>U007F
     <TD>Corrispondente a codifica PC
</TR>
<TR>
     <TD>
     <TD>0x80
     <TD>Simbolo del centesimo
     <TD>U00A2
     <TD>Simbolo del centesimo
</TR>
<TR>
     <TD>
     <TD>0xA0
     <TD>Simbolo della sterlina
     <TD>U00A3
     <TD>Simbolo della sterlina
</TR>
<TR>
     <TD>
     <TD>0xFD
     <TD>Simbolo di negazione
     <TD>U00A7
     <TD>Simbolo di negazione
</TR>
<TR>
     <TD>
     <TD>0xFE
     <TD>Barra retroversa
     <TD>U005C
     <TD>Barra retroversa
</TR>
<TR>
     <TD>
     <TD>0xFF
     <TD>Tilde
     <TD>U007E
     <TD>Tilde
</TR>
</table>
</p>
       <p>Ad esempio, nella tabella Cp943C la codifica PC per
          l'intervallo 0x00 - 0x7F viene convertito in Unicode
          per l'intervallo U0000 - U007F. Nella tabella Cp942
          il simbolo dello Yen nella codifica PC (0x5c) viene
          convertito nel simbolo dello Yen Unicode (U00A5).</p>


       <p>Per caratteri DBCS:</p>

        <UL>
       <LI>Nelle tabelle Cp943, Cp943C e SJIS, la codifica PC viene
           considerata come il nuovo ordine JIS.

       <LI>Nelle tabelle Cp942 e Cp942C, la codifica PC viene
           considerata come il vecchio ordine JIS.
</ul>

<p>Per i caratteri definiti dall'utente e per quelli IBM estesi:
</p>
<UL>
<LI>Nelle tabelle Cp943 e Cp943C, questi caratteri della codifica
    PC vengono convertiti in Unicode.
       <LI>Nella tabella SJIS, questi caratteri della codifica PC
           non vengono convertiti in Unicode.
       <LI>Nelle tabelle Cp942 e Cp942C, questi caratteri della
           codifica PC vengono convertiti in Unicode.
</UL>

<HR>
<H2><A NAME="Header_14" HREF="#ToC_14">Limitazioni note</A></H2>
<UL>
<LI>
Il compilatore JIT (just-in-time) consente di definire il profilo del
metodo e di tenerne traccia in maniera ottimale mediante
l'opzione (<B>-tm</B>). Per tenere traccia del metodo e definirne il profilo in
modo completo, disabilitare il JIT. Per ulteriori informazioni, consultare la sessione
<A HREF=runtime.htm#JIT>Disattivazione del compilatore JIT</A> in
<A HREF=runtime.htm>Documentazione Runtime</A>.
<P><LI>Quando il compilatore JIT  abilitato, un'eccezione non
ricevuta genera un ritorno di traccia senza numeri di riga di
origine. Per
ottenere un ritorno di traccia con numeri di riga,  necessario
<A HREF=runtime.htm#JIT>disabilitare il
JIT</A> ed eseguire nuovamente l'applicazione che genera l'errore.

</UL>
<HR>
<H2><A NAME="Header_15" HREF="#ToC_15">Informazioni particolari</A></H2>
<P> Marchi
<P>I seguenti termini sono marchi della International Business Machines
Corporation.
<UL>
<LI>IBM</LI>
<LI>OS/2</LI>
</UL>
<p>I marchi riportati di seguito sono marchi di altre societ:
<UL>
<LI>Java e 100% Pure Java sono marchi della Sun Microsystems, Inc..
<LI> Java technology  concesso su licenza dalla Sun Microsystems,
     Inc. Java  un marchio della Sun Microsystems, Inc..
</UL>
<P>Copyright
<UL>
<LI> (c) Copyright Sun Microsystems, Inc. 1992-1998. Tutti i diritti riservati.
<LI> (c) Copyright IBM Corporation, 1996-1998. Tutti i diritti riservati.
<LI> Questo prodotto si basa in parte sul lavoro dell'Independent JPEG Group.
<LI> Limitazioni per gli utenti appartenenti al governo degli Stati
Uniti d'America. L'utilizzo, la duplicazione o la divulgazione sono
limitati dal supplemento GSA ADP al contratto con l'IBM Corporation.
</UL>

</BODY></HTML>
