<!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 for the IBM OS/2 Warp Developer Kit, Java(TM) Edition</TITLE>
</HEAD><BODY BGCOLOR="FFFFFF">
<A NAME=Top_Of_Page> </A>

<center><H3>Ambiente de Desenvolvimento para o</H3>
<H4>IBM(R) OS/2(R) Warp Developer Kit, Java(TM) Technology Edition, Verso 1.1.8</H4>
</center>

<P>
O <B>IBM OS/2 Warp Developer Kit, Java(TM) Technology Edition, Verso 1.1.8 (Developer Kit)</B>
 baseado no nvel de suporte Java 1.1.8 da Sun Microsystems. Este arquivo descreve o componente Conjunto de Ferramentas
do Developer Kit.
<HR>
<MENU>
<LI><A NAME=ToC_1  HREF="#Header_1 " >Instalao</A>
<LI><A NAME=ToC_2  HREF="#Header_2 " >A tag APPLET</A>
<LI><A NAME=ToC_16  HREF="#Header_16 " >Ferramentas Java</A>
<UL>
<LI><A NAME=ToC_3  HREF="#Header_3 " > Compilador</A>
<LI><A NAME=ToC_4  HREF="#Header_4 " >Ferramentas de Depurao</A>
<UL>
<LI><A NAME=ToC_4A HREF="#Header_4A " >ICAT Debugger</A>
<LI><A NAME=ToC_4B HREF="#Header_4B " >JDB debugger</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 " >Como acessar Objetos Java a Partir de um Programa C</A>
<UL>
<LI><A NAME=ToC_9  HREF="#Header_9 " >A Java Native Interface (JNI)</A>
<LI><A NAME=ToC_9A HREF="#Header_9A" >Cabealho JAVAH e Arquivos de Origem</A>
</UL>
<LI><A NAME=ToC_10 HREF="#Header_10 " >Arquivos Gravados Atravs de PrintStream</A>
<LI><A NAME=ToC_11 HREF="#Header_11 " >Procedimento do Java.lang.Class.forName()</A>
<LI><A NAME=ToC_12 HREF="#Header_12 " >Caracteres Barra Invertida e Til em Pases com DBCS</A>
<LI><A NAME=ToC_13 HREF="#Header_13 " >Converso Entre ShiftJIS e Unicode
na Verso Japonesa do OS/2 Warp 4</A>
<LI><A NAME=ToC_14 HREF="#Header_14" >Limitaes Conhecidas</A>
<LI><A NAME=ToC_15 HREF="#Header_15" >Avisos</A>
</MENU>

<HR><P>
<H2><A NAME="Header_1" HREF="#ToC_1">Instalao</A></H2>
<P>
Consulte o arquivo
README 
no diretrio <B>\JAVA11</B> para obter as informaes
mais recentes relativas  instalao. Aps a instalao,
este arquivo estar localizado no diretrio em que os arquivos do
Developer Kit foram descompactados.</p>
<P>
O componente Conjunto de Ferramentas do Java requer que o componente Tempo de Execuo
seja instalado primeiro. O Conjunto de Ferramentas deve residir em uma partio HPFS ou JFS.
As ligaes
deste documento s funcionaro se os componentes Tempo de Execuo, Conjunto de Ferramentas e ICAT Debugger
forem instalados na mesma unidade e no mesmo diretrio.
</P>
<HR>
<H2><A NAME="Header_2" HREF="#ToC_2">A Tag APPLET</A></H2>
<P>
A tag APPLET  utilizada para incorporar um miniaplicativo Java em uma pgina HTML. Quando
a pgina HTML  carregada em um navegador Web ativado por Java, o miniaplicativo  executado.
Se o navegador Web reconhecer a tag APPLET, mas no puder executar miniaplicativos Java,
o texto especificado pelo atributo ALT ser exibido. O Visualizador de Miniaplicativos, includo como parte do componente Tempo de
Execuo do Java, tambm pode ser utilizado para executar um miniaplicativo.
</P>
<H3>Sintaxe da Tag APPLET</H3>
<P>
A sintaxe da tag APPLET :
<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>Este atributo fornece o nome do arquivo que contm
    a subclasse Miniaplicativo compilada do miniaplicativo. Esse arquivo  relativo 
    URL de base do miniaplicativo e no pode ser absoluto. Este ser um
    atributo obrigatrio se OBJECT no for especificado.
<P><DT><B>OBJECT = serializedApplet
</B><DD>Este atributo fornece o nome do arquivo que contm
    uma representao serializada de um miniaplicativo. O miniaplicativo  desserializado,
    o mtodo <b>init()</b> no  chamado, mas o mtodo
    <b>start()</b>  executado. Quaisquer atributos transmitidos a esse miniaplicativo ficam disponveis
    para ele. Voc deve ter cuidado ao utilizar este recurso,
    porque um miniaplicativo deve ser parado antes de ser serializado.
Este atributo ser obrigatrio se CODE no for especificado.
<P><DT><B>CODEBASE = codebaseURL</B>
<DD>Este atributo opcional especifica o diretrio que contm
    o cdigo para o miniaplicativo. Se este atributo no for especificado, a
    URL do documento ser utilizada.
<P><DT><B>ARCHIVE = archiveList</B>
<DD>Este atributo opcional especifica um ou mais arquivos que contm
    classes e outros recursos que devem ser carregados previamente. As classes
    so carregadas com a utilizao de uma ocorrncia de um AppletClassLoader com o
    CODEBASE fornecido. Os arquivos em archiveList so separados por
    vrgulas (<B>,</B>). Mltiplas tags APPLET com o mesmo CODEBASE compartilham a
    mesma ocorrncia do AppletClassLoader.
<P><DT><B>ALT = alternateText
</B><DD>Este atributo opcional especifica qualquer texto que dever ser
    exibido, se o navegador reconhecer a tag APPLET, mas no puder
    executar miniaplicativos Java.
<P><DT><B>NAME = appletInstanceName
</B><DD>Este atributo opcional especifica um nome para a ocorrncia do miniaplicativo,
    o que permite que os miniaplicativos da mesma pgina se encontrem e
    se comuniquem.
<P><DT><B>WIDTH = pixels
</B><DD>Este atributo obrigatrio especifica a largura inicial, em pixels,
    da rea de exibio de miniaplicativos, sem contar nenhuma janela ou
    dilogo aberto pelo miniaplicativo.
<P><DT><B>HEIGHT = pixels
</B><DD>Este atributo obrigatrio especifica a altura inicial, em pixels,
    da rea de exibio de miniaplicativos, sem contar nenhuma janela ou
    dilogo aberto pelo miniaplicativo.
<P><DT><B>ALIGN = alignment
</B><DD>Este atributo especifica o alinhamento do miniaplicativo.
    Os valores possveis deste atributo so os mesmos para
    a tag IMG do HTML:  left, right, top, texttop, middle, absmiddle,
    baseline, bottom, absbottom.
<P><DT><B>VSPACE = pixels
</B><DD>Este atributo especifica o nmero de pixels acima e
    abaixo do miniaplicativo. Ele  tratado da mesma forma que
    o atributo VSPACE na tag IMG do HTML.
<P><DT><B>HSPACE = pixels
</B><DD>Este atributo especifica o nmero de pixels de
    cada lado do miniaplicativo. Ele  tratado da mesma forma que
    o atributo HSPACE na tag IMG do HTML.
<P><DT><B>&lt; PARAM NAME = appletAttribute1 VALUE = appletValue1 &gt; ...
</B><DD>Esta tag  a nica forma de especificar um atributo especfico do miniaplicativo.
    Os miniaplicativos acessam seus atributos com o mtodo <B>getParameter( )</B>.
</DL>
<H3>Exemplo de Tag APPLET</H3>
<P>
Este exemplo mostra como codificar a tag APPLET para executar um miniaplicativo na
classe MyApplet, em uma janela de 320 pixels de largura e 120 pixels de altura. Dois
parmetros so transmitidos ao miniaplicativo, <B>mynumber</B> e
<B>mytext</B> e, se a pgina HTML for exibida por um navegador
que no consegue executar miniaplicativos Java, o texto especificado pelo atributo ALT ser exibido:
<PRE>
   &lt;applet code="MyApplet.class" width=320 height=120
           alt="Aqui voc veria um excelente miniaplicativo em um navegador com capacidade para Java."&gt;
   &lt;param name=mynumber value="42"&gt;
   &lt;param name=mytext   value="Fido 3"&gt;
   &lt;/applet&gt;
</PRE>
<p>
Os parmetros <B>mynumber</B> e <B>mytext</B> so acessados a partir da classe
MyApplet com chamadas para o mtodo <B>getParameter()</B>. O parmetro
<B>mynumber</B> pode ser tratado da seguinte forma:
<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">Ferramentas Java</A></H2>
<p>As sees a seguir descrevem as ferramentas Java disponveis para ajud-lo
a escrever e depurar programas Java.</p>

<HR>
<H3><A NAME="Header_3" HREF="#ToC_3"> Compilador</A></H3>
<P>
O <B></B> compilador Java o cdigo de origem em cdigos de bytes Java,
que so lidos e executados posteriormente pelo interpretador Java. O cdigo de origem est
nos arquivos encerrados com uma extenso <B>.java</B>. O compilador
armazena sua sada de cdigo de byte em um arquivo com o mesmo nome do arquivo de origem,
mas com uma extenso <B>.class</B>.

<P>
O compilador comea com um tamanho inicial da heap do interpretador
de Java de 8 MB e possui uma alocao mxima dessa rea de 16 MB. Se o tamanho da heap for insuficiente,
voc poder especificar um tamanho maior com a opo <B>-mx</B> do interpretador
de Java. A opo <B>-J</B> em <B></B>  utilizada para transmitir a opo
para o interpretador Java. Por exemplo, para compilar LargeClass.java com um tamanho de rea para dados dinmicos de
100 MB:
<PRE>
        javac -J-mx100m LargeClass.java
</PRE>
<HR>
<H3><A NAME="Header_4" HREF="#ToC_4">Ferramentas de Depurao</A></H3>
<P>
O Developer Kit fornece duas ferramentas de depurao Java:
<UL>
<LI><A HREF="#Header_4A " >ICAT Debugger</A>
 um depurador de nvel de fonte que  executado no OS/2 Warp. Ele fornece depurao
local ou remota das aplicaes Java.
<LI><A HREF="#Header_4B " >O Java Debugger (JDB)</A>,
fornecido em plataformas 100% Pure Java,  um depurador da linha de comandos para classes Java.
</UL>
<H3>Como Depurar Opes do Compilador</H3>
<P>
Ao compilar a aplicao Java, especifique a opo <B>-g</B> para ativar
a gerao de tabelas de depurao. Estas tabelas contm informaes
essenciais sobre nmeros de linhas e variveis locais para os depuradores.
<P>
Voc pode obter informaes adicionais sobre depurao para o JDB especificando
a opo <B>-O</B>, que dispe em seqncia os mtodos esttico, final e privado.
Esta opo no deve ser utilizada com o ICAT Debugger para o Developer Kit porque
o cdigo interno distorce a exibio dos nmeros de linhas de origem.
<P>
Uma classe compilada com informaes sobre depurao  maior do que uma compilada
sem as mesmas.
<H3>Interface de Circuito Fechado TCP/IP</H3>
<P>
Para depurar um aplicativo Java que est sendo executado na mesma mquina
que o depurador, a interface de circuito fechado Transfer Control Protocol/Internet Protocol (TCP/IP)
deve estar ativa. Para verificar
se a interface est ativa, digite o seguinte em um prompt de comandos
do OS/2:
<PRE>
        ifconfig lo
</PRE>
Se a interface estiver ativa, voc dever ver algo semelhante a isto:
<PRE>
lo: flags=809&lt;UP,LOOPBACK&gt;
         inet 127.0.0.1 netmask xff000000
</PRE>
Caso contrrio, voc dever ver algo semelhante a isto:
<PRE>
lo: flags=808&lt;LOOPBACK&gt;
</PRE>
Se a interface de circuito fechado TCP/IP estiver inativa, voc poder inici-la digitando o
seguinte em um prompt de comandos do OS/2:
<PRE>
        ifconfig lo 127.0.0.1 up
</PRE>
<P>
Para ativar esta interface automaticamente, abra a pasta TCP/IP e, em seguida, abra
o objeto Configurao TCP/IP. Dependendo da verso do TCP/IP,
voc tambm pode abrir o objeto Configurao TCP/IP digitando o seguinte em um prompt de comando do
OS/2:
<UL>
<LI><B>TCPCFG</B> para a verso 4.0 ou anterior</LI>
<LI><B>TCPCFG2</B> para a verso 4.1 ou superior</LI>
</UL>
Aps abrir o objeto Configurao TCP/IP, clique no separador <B>Rede</B>.
Selecione a
<B>interface de circuito fechado</B> como a interface a ser configurada e selecione
<B>Ativar interface</B>.  No prompt de comandos do OS/2, especifique <B>127.0.0.1</B>
para o Endereo IP. Feche o objeto Configurao TCP/IP e salve as alteraes
quando solicitado.
</P>

<HR>
<H3><A NAME="Header_4A" HREF="#ToC_4A">ICAT Debugger</A></H3>
<P>
O IBM Interactive Code Analysis Tool (ICAT) para OS/2 Java fornece
depurao de aplicativos OS/2 Java e suas (potenciais) chamadas de mtodo
nativo [Cdigo C ou C++ guardados em um arquivo da Biblioteca de Carga Dinmica (DLL)
do OS/2]. O ICAT Debugger  um depurador de nvel de fonte que utiliza
o Presentation Manager (PM) do OS/2 para seu espao de apresentao e
executa seu mecanismo de depurao fora de uma JVM.
<P>
Informaes detalhadas sobre o depurador podem ser encontradas na
<A HREF=icatjava\help\icatjava.htm>documentao do ICAT Debugger para o Developer Kit</A>.
<HR>
<H3><A NAME="Header_4B" HREF="#ToC_4B">Depurador Java Debugger (JDB)</A></H3>
<P>
O <B>JDB</B>  um depurador da linha de comandos para classes
Java. O Java Debugger  iniciado no lugar do interpretador de Java.
Uma lista dos comandos disponveis e uma breve descrio de cada um podem ser encontradas
especificando-se <B>auxlio</B> ou <B>?</B> no prompt de comandos do OS/2 aps a ativao do depurador.
<HR>
<H3><A NAME="Header_5" HREF="#ToC_5">JAVAP</A></H3>
<P>
<B>JAVAP</B> desmonta um arquivo de classe Java e, dependendo das opes
especificadas, exibe vrias informaes sobre o mesmo, incluindo:
<ul>
<li>Tabelas de variveis locais e nmeros de linhas
<li>Cdigo desmontado
<li>Variveis e mtodos pblicos
<li>Variveis e mtodos privados
</ul>
</p>
<p>
Se for digitado <B>JAVAP</B> sem nenhuma opo em uma linha de comandos do OS/2, ser exibida uma lista de opes.
</p>
<HR>
<H3><A NAME="Header_6" HREF="#ToC_6">JAVADOC</A></H3>
<P>
<B>JAVADOC</B> gera um conjunto de pginas HTML baseadas em declaraes e
comentrios nos arquivos de origem Java. JAVADOC exibe todas as declaraes
pblicas e protegidas para classes, interfaces, mtodos e variveis.
Voc pode transmitir um nome de pacote ou uma lista de arquivos de origem Java como
um argumento para JAVADOC.</P>

<p><b>Nota:</b> Os arquivos de origem (.java) so utilizados; os arquivos de classes (.class) no so utilizados.
</p>

<p>
Se for digitado <B>JAVADOC</B> sem nenhuma opo em uma linha de comandos do OS/2, ser exibida uma lista de opes.
</p>
<HR>
<H3><A NAME="Header_7" HREF="#ToC_7">JAVAH</A></H3>
<P>
<B>JAVAH</B> produz arquivos de cabealho C e arquivos de origem C de uma classe de Java.
Esses arquivos so utilizados para
<A HREF="#Header_9A">acessar objetos Java a partir de um programa C</A>.
</p>
<HR>
<H2><A NAME="Header_8" HREF="#ToC_8">Como Acessar Objetos Java a Partir de um Programa C</A></H2>
<P>
Os objetos Java podem ser acessados a partir de um programa nativo C ou C+, de uma destas duas formas:
<UL>
<LI><A HREF="#Header_9 " >A Java Native Interface (JNI)</A>
<LI><A HREF="#Header_9A" >Cabealho JAVAH e Arquivos de Origem</A>
</UL>
<P>
A JNI, que era nova no Java 1.1.1, fornece aos mtodos nativos uma interface
mais estvel do que o mtodo anterior de utilizar arquivos de cabealho e de origem
gerados por JAVAH.

<P>
<H3>Consideraes Gerais Sobre Programao</H3>
<UL>
<LI>A Mquina Virtual Java (JVM) modifica a palavra de controle da unidade
da vrgula flutuante para suprimir algumas excees da vrgula flutuante. Os mtodos nativos
que modificam a palavra de controle da vrgula flutuante devem salvar o
contedo da palavra de controle na entrada e restaur-lo na sada do mtodo
nativo.

<P><LI>No OS/2 Warp Server, Verso 4 anterior ao FixPak 31 e
OS/2 Warp Server SMP anterior ao FixPak 31, a chamada de API DosQueryThreadContext
no  suportada.
Isto
significa que o JVM deve utilizar um mecanismo de suspenso voluntria
para a coleta de lixo. Esse mecanismo requer que todas as
subtarefas Java verifiquem periodicamente um pedido suspenso. Esse mecanismo
falha e a coleta de lixo no ser possvel se um mtodo nativo entrar em
uma suspenso imediata de qualquer durao.
<P>No OS/2 Warp 4, este mecanismo  substitudo por um mais robusto e menos
intrusivo, mas para garantir compatibilidade
ao executar aplicaes em todas as verses suportadas do OS/2, os mtodos
nativos no devem esperar por mais de um ou dois segundos.
<P>
Os responsveis pela chamada podem participar no processo de suspenso voluntria
fazendo com que as longas esperas fora do ambiente Java sejam divididas
em uma srie de esperas curtas (&lt; 0,5 segundo) com uma chamada para
<b>ThreadCheckForSuspend() </b>emitida entre cada espera. Por exemplo, voc
pode substituir este cdigo:

<PRE>
      rc = DosRequestMutexSem( mutex, SEM_INDEFINITE_WAIT );
</PRE>por:<PRE>
      do
      {
        rc = DosRequestMutexSem( mutex, 250L );
        if (rc == ERROR_TIMEOUT) ThreadCheckForSuspend();
      } while (rc == ERROR_TIMEOUT);
</PRE>
<P>
A definio do prottipo para a chamada ThreadCheckForSuspend :
<PRE>
       void ThreadCheckForSuspend (void);
</PRE>
<LI>Para evitar possveis conflitos de nomes de DLLs no futuro, utilize
nomes de DLLs que no comecem com a cadeia <B>JAVA</B>.

</UL>
<HR>
<H2><A NAME="Header_9" HREF="#ToC_9">A Java Native Interface (JNI)</A></H2>
<P>
Os objetos Java podem ser acessados a partir de um programa C, utilizando-se a Java Native
Interface (JNI), que era nova no Java 1.1.1. A utilizao da JNI fornece
uma interface mais estvel que o
<A HREF="#Header_9A">Cabealho JAVAH e Arquivos de Origem</A>.
<P>
Para produzir mtodos nativos especficos da plataforma em C ou C++ utilizando a JNI no OS/2:

<OL>
<LI>Crie um arquivo de origem de classe Java para ajustar os mtodos nativos:
<PRE>
    class MyNativeClass
       {
         String x;
         ...
         public native void demo(String x);
         ...
         static { System.loadLibrary("MyLib"); }
       }
</PRE>
<P><B>Nota: </B>  O mtodo <b>System.loadLibrary</b>  executado na primeira vez em que
a classe  chamada e carrega uma DLL chamada MyLib que deve
conter os mtodos nativos.

<P><LI>Gere um arquivo .h para o arquivo de classe, utilizando <B>JAVAH</B>:
<PRE>
     javah -jni MyNativeClass
</PRE>
<P>
Isso cria um arquivo <B>MyNativeClass.h</B>.
<P>
<LI>Crie um arquivo .c para implementar as funes declaradas no
arquivo MyNativeClass.h e inclua uma linha para adicionar o cabealho gerado.

<PRE>
#include "MyNativeClass.h"
</PRE>
<LI>Grave os mtodos nativos em C utilizando pontos de entrada na forma
Java_<B>&lt;nome da classe&gt;_&lt;nome do mtodo&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>
Gere um arquivo de definio do mdulo, <B>javadef.def</B>, da seguinte forma:
<PRE>
LIBRARY INITINSTANCE
DATA MULTIPLE NONSHARED
CODE SHARED
</PRE>
<LI>Compile e ligue o programa da seguinte forma:
<PRE>
icc /Ge- /FeMyLib.dll MyNativeClass.c javadef.def javai.lib
</PRE>
<P>O caminho de pesquisa INCLUDE deve incluir:
<PRE>
    x:\JAVA11\include;x:\JAVA11\include\os2;
</PRE>
<P>e o caminho de pesquisa LIB deve incluir:
<PRE>
    x:\JAVA11\lib;
</PRE>
onde <B>x:\JAVA11</B>  a unidade e o diretrio em que voc instalou
o componente Conjunto de Ferramentas do Java.
</OL>

<HR>
<H2><A NAME="Header_9A" HREF="#ToC_9A">Cabealho JAVAH e Arquivos de Origem</A></H2>
<P>
Os objetos Java podem ser acessados a partir de um programa C, utilizando-se os arquivos de
cabealho e de origem C produzidos por
<A HREF="#Header_7">JAVAH</A>.  Esses arquivos permitem o acesso
s variveis de ocorrncia de um objeto.
<P>
<B>Nota: As DLLs do mtodo nativo do Java 1.0.2 no so compatveis com o
Developer Kit e devem ser recompiladas e religadas.
</B>
<P>
<B>As DLLs do mtodo nativo do Java 1.0.2 devem ser recompiladas e religadas
antes de serem utilizadas com o Developer Kit.</B>  Isso  necessrio
devido s alteraes no modelo da rea para dados dinmicos do Java, que resultaram na alterao da macro
<B>unhand()</B>. O nome da DLL do interpretador em tempo de execuo do Java tambm foi
alterado, mas isso deve ser transparente para os desenvolvedores de mtodos nativos,
contanto que eles religuem com a nova verso de <B>JAVAI.LIB</B>.

<P>
Com o novo modelo da rea para dados dinmicos Java, os identificadores e os objetos agora podem ser movidos
durante a coleta de lixo. O coletor de lixo altera identificadores que ele
conhece. No entanto, se um mtodo nativo armazena um identificador de objeto Java na
memria esttica ou na rea para dados dinmicos C, o coletor de lixo no o conhecer e
no poder corrigi-lo. Nesse caso, o coletor de lixo poder
mover o identificador e invalidar a referncia retida pelo mtodo nativo.
<P>
Para evitar que o coletor de lixo mova um determinado identificador, chame o mtodo
<B>pin_handle()</B> e transmita o identificador que no deve ser movido.
Utilize o mtodo <B>unpin_handle()</B> ao terminar com o identificador. Isso permite que o identificador seja movido durante a coleta de lixo.

<P>
Para utilizar mtodos nativos especficos da plataforma em C ou C++ no OS/2:
<OL>
<LI>Crie um arquivo de origem de classe Java para ajustar os mtodos nativos:
<PRE>
    class MyNativeClass
       {
         String x;
         ...
         public native void demo(String x);
         ...
         static { System.loadLibrary("MyLib"); }
       }
</PRE>
<P><B>Nota: </B>  O mtodo System.loadLibrary  executado na primeira
vez que a classe  chamada e carrega uma DLL chamada MyLib, que deve
conter os mtodos nativos.

<P><LI>Gere um arquivo .h para o arquivo de classe, utilizando <B>JAVAH</B>:
<PRE>
     javah MyNativeClass
</PRE>
<LI>Gere um arquivo de bloco de instrues .c para sua classe, utilizando <B>JAVAH</B>:
<PRE>
     javah -stubs MyNativeClass
</PRE>
<LI>Grave os mtodos nativos em C utilizando pontos de entrada na forma
<B>&lt;nome da classe&gt;_&lt;nome do mtodo&gt;</B>:
<PRE>
   void MyNativeClass_demo(struct Hjava_lang_String * x)
</PRE>
<LI>Compile os arquivos C. O caminho de pesquisa INCLUDE deve incluir o
seguinte:
<PRE>
    x:\JAVA11\include;x:\JAVA11\include\os2;
</PRE>
onde <B>x</B>  a unidade onde voc instalou o Java.<P>
<LI>Ligue os arquivos C que contm os mtodos nativos ao arquivo de bloco de instrues C para
criar uma DLL com o nome especificado na instruo
System.loadLibrary. Voc precisa ligar  biblioteca Java
<B>x:\JAVA11\LIB\JAVAI.LIB </B> (ou  verso de depurao da biblioteca,
<B>JAVAI_G.LIB</B>) caso tenha utilizado qualquer funo do programa de auxlio do Tempo de Execuo do Java.

</OL>
<P>
O Tempo de Execuo do Java utiliza a conveno de chamada IBM VisualAge C _Optlink
para chamar mtodos nativos em DLLs.

<HR>
<H2><A NAME="Header_10" HREF="#ToC_10">Arquivos Gravados Atravs de PrintStream</A></H2>
<P>
Os registros gravados em um arquivo atravs do mtodo <B>println()</B> na classe PrintStream
so encerrados atravs do mtodo <b>newLine()</b> do
OutputStreamWriter bsico. O mtodo <b>newLine()</b> utiliza a propriedade do sistema <B>line.separator</B>
apropriada para a plataforma, que no OS/2 representa os caracteres (x'0d0a').
<P>
Essa  uma alterao do JDK 1.0.2. No JDK 1.0.2, ao gravar em um arquivo atravs de um PrintStream, um nico caractere de nova linha (x'0a') era utilizado como separador de linhas.
Isso era consistente com as convenes do padro UNIX, mas diferente da conveno
do OS/2, onde os registros terminam com os caracteres (x'0d0a').
<P>O Java l apropriadamente os registros terminados em qualquer uma das formas.
<HR>
<H2><A NAME="Header_11" HREF="#ToC_11">Procedimento do 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> descreve a alterao no procedimento de <b>Java.lang.Class.forName()</b>.
Esse documento afirma que:
<P>
<I>O JLS 20.3.8 deve especificar que uma chamada ao java.lang.Class.forName("X") faz com que a classe nomeada "X" seja inicializada.</I>

<P>
Para o Developer Kit, o procedimento de <b>Class.forName()</b> corresponde
 especificao da Sun modificada e  implementao de referncia da Sun. Uma chamada ao java.lang.Class.forName("X") agora faz com que a classe nomeada "X" seja inicializada.
<P>
Este procedimento  implicitamente assumido nos exemplos do Java Database Connectivity (JDBC) que
utilizam <b>Class.forName()</b> para carregar controladores JDBC e esperam que o controlador JDBC se torne imediatamente utilizvel.
Os exemplos assumem que os inicializadores estticos no controlador JDBC so executados por <b>Class.forName()</b>,
para que o cdigo do inicializador esttico no controlador possa se registrar no gerenciador de controladores JDBC.

<HR>
<H2><A NAME="Header_12" HREF="#ToC_12">Caracteres Barra Invertida e Til em Pases com DBCS</A></H2>
<p>Determinadas pginas de cdigo DBCS (por exemplo, 932, 942, 943, 949) no possuem uma barra invertida
ou til no mesmo ponto do cdigo como outras pginas de cdigo ASCII. A seguir, encontram-se alguns exemplos:
<UL>
<LI>Na maioria das pginas de cdigo ASCII, o ponto de cdigo 0x5c  uma barra invertida
       e o ponto de cdigo 0x7e  um til.
<LI>Nas pginas de cdigo 932, 942 e 943, o ponto de cdigo
       0x5c  um smbolo de Iene Japons e o ponto de cdigo 0x7e  uma sobrelinha.
<LI> Na
       pgina de cdigo 949, o ponto de cdigo 0x5c  um sinal Won Coreano.
</UL>

<H3>Posicionamento de Caracteres</H3>
<p>O compilador Java, javac, converte primeiro o programa-fonte Java
       a partir da pgina de cdigo local para Unicode. Ento, ele processa as seqncias de escape
       de caracteres, como \n, lendo o caractere de barra invertida,
       em seguida o caractere 'n', e combinando-os como um escape de caractere
       para gerar uma nova linha do Unicode, U+000A, antes de compilar o programa.</p>

<p>Em algumas ocorrncias, o caractere barra invertida (caractere 0x5C na pgina de cdigo 850)
em certas pginas de cdigo DBCS no est na mesma posio. Por exemplo, na pgina de cdigo 943, o caractere 0x5C  um caractere de
       Iene. Se o compilador javac converteu o ponto de cdigo 0x5c na pgina de
       cdigo local (um smbolo de Iene), no programa-fonte Java, para um smbolo de Iene do
       Unicode (U+00A5), ento nenhum caractere de barra invertida estar presente,
       portanto nenhum processamento de seqncia de escape de caractere ser executado.</p>

<p>Alm do mais, nas pginas de cdigo 932, 943 e 949, no h barra invertida
       em nenhum lugar da pgina de cdigo local, portanto no h como um programador
       gerar uma barra invertida do Unicode (para gerar outros caracteres do Unicode
       utilizando as seqncias de escape do Unicode) aps a converso da pgina de cdigo
       no compilador javac.</p>

<H3>Tabelas de Converso</H3>

<p>Para permitir que programadores escrevam programas contendo uma barra invertida, o Java Virtual Machine (JVM)
utiliza tabelas de converso de pginas de cdigo modificadas para as pginas de cdigo 932, 943 e 949. Essas tabelas modificadas passam pelos caracteres
       0x00 a 0x7F na pgina de cdigo local para U+0000 a U+007F
       no Unicode.
Isso significa que um programador pode utilizar um smbolo de Iene (0x5c)
       na pginas de cdigo 932 e 943 e um sinal Won (0x5c) na pgina de cdigo 949 para
       representar um caractere de barra invertida (U+005C) no Unicode. Uma sobrelinha
       (0x7e) nas pginas de cdigo 932 e 943 pode ser utilizada para representar um til
       (U+007E) no Unicode.</p>

<p>Essas tabelas de converso de pginas de cdigo modificadas tambm so utilizadas como o padro para o JVM
durante a execuo nas pginas de cdigo 932, 943 e 949 do OS/2. Elas so utilizadas para classes PrintStream, PrintWriter, OutputWriter
       e InputReader quando nenhuma codificao de caractere explcita for
       especificada.</p>

<p>Embora a utilizao do 0x5C na pgina de cdigo local possa ser impressa como um
       smbolo de Iene na pgina de cdigo local, se um programador de aplicativo realmente
       quiser um smbolo de Iene, ento um escape do Unicode deve ser utilizado para gerar
       um caractere U+00A5 do Unicode. Isto  necessrio para tornar a aplicao portvel para outras pginas de cdigo
e tambm para fazer com que o Abstract Window Toolkit (AWT) exiba o glifo de caractere correto. Consideraes similares aplicam-se, se o programador
       quiser uma sobrelinha real: o caractere U+203E do Unicode deve
       ser utilizado dentro do programa Java.</p>

<H3>Pgina de Cdigo 942</H3>

<p>A pgina de cdigo 942 tem tanto o til como a barra invertida, embora em pontos de
       cdigo diferentes de outras pginas de cdigo. Como essa pgina de cdigo
       tem barra invertida e til, mesmo que em posies diferentes de outras pginas de cdigo
       ASCII, os conversores de pgina de cdigo modificados no so
       utilizados por padro.</p>

<p>Os programas nessa pgina de cdigo podem ser escritos utilizando-se
       smbolos reais de barra invertida e til na pgina de cdigo local. Se os programas
       forem escritos em outra pgina de cdigo ASCII, onde a barra invertida  um ponto de cdigo
       0x5C, e eles precisarem ser compilados, ento, na maioria dos casos, o comportamento adequado
       pode ser alcanado utilizando-se um dos seguintes mtodos:</p>

       <ul>
       <li>Substituir o caractere 0x5c no programa-fonte Java pelo
            caractere de barra invertida na pgina de cdigo local (ponto de cdigo
            0xfe).

        <li>Ao compilar o aplicativo ou o miniaplicativo Java, indique que o arquivo
            est escrito em uma pgina de cdigo diferente da pgina de cdigo
            local. Por exemplo, se o cdigo fonte foi escrito na pgina de
            cdigo 850, utilize o seguinte comando para compil-lo:

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

<p>Se o arquivo estiver escrito com caracteres DBCS na pgina de cdigo 942,
            utilizando 0x5C para representar a barra invertida, ento a opo -encoding
            do javac pode ser aplicada para obrigar o uso da codificao de caractere
            Cp942c', que passa pelos caracteres 0x00 a 0x7F na pgina de cdigo
            local de U+0000 para U+007F no Unicode.
Por exemplo:</p>

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

<p>Se o programa-fonte estiver escrito na pgina de cdigo 942 utilizando uma
       barra invertida real (ponto de cdigo 0xfe) e precisar ser compilado em outro sistema,
       ento utilize o programa native2ascii para converter o programa-fonte Java
       da pgina de cdigo local para uma pgina de cdigo ASCII bsica. Por exemplo:</p>

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

<p>Para converter de uma pgina de cdigo especfica para uma pgina de cdigo ASCII bsica:</p>

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

<H3>Caractere Separador de Arquivo</H3>
<p>       O caractere separador de arquivo na maioria das pginas de cdigo ASCII no OS/2  uma
       barra invertida.
O caractere de separador de arquivo est acessvel em um programa Java utilizando-se a propriedade de sistema 'file.separator'
ou a constante esttica, 'java.io.File.separator'.</p>

<p>Nas pginas de cdigo 932 e 943, o caractere de separador de arquivo local permanece
       no ponto de cdigo 0x5C, mas  exibido no prompt de comando como um smbolo de
       Iene. Similarmente, na pgina de cdigo 949, o caractere de separador
        exibido como um sinal Won. O conversor de caracteres padro para essas
       pginas de cdigo converte o caractere file.separator para uma barra invertida no
       Unicode, portanto um aplicativo Java reconhece o separador de arquivo como uma barra
       invertida (U+005C) do Unicode.</p>

<p>Na pgina de cdigo 942, o separador de arquivo local  tambm um smbolo de Iene, mas
        convertido pelo conversor de caracteres do Java para um smbolo de Iene no Unicode,
       portanto o aplicativo Java reconhece o caractere de separador de arquivo como um
       smbolo de Iene (U+00A5) do Unicode.</p>

<p>Para garantir que as aplicaes Java vo funcionar em todos os sistemas operacionais, utilize sempre
a propriedade do sistema file.separator. Os programadores de aplicativo
       no devem incorporar separadores de caminho em seus
       programas.</p>

       <p>Por exemplo, no utilize:</p>

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

       <p>Em vez disso, utilize:</p>

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

<HR>
<H2><A NAME="Header_13" HREF="#ToC_13">Converso Entre ShiftJIS e Unicode na Verso Japonesa
do OS/2 Warp 4</A></H2>

<p>       No ambiente japons, as seguintes tabelas de converso para o
       cdigo ShiftJIS (cdigo PC) e Unicode esto disponveis:</p>

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

       <p>As tabelas de converso padro do sistema so:</p>

         <UL>
         <li>Cp943C para as pginas de cdigo 943 e 932
         <li>Cp942 para a pgina de cdigo 942
         </UL>

       <p>Para utilizar a tabela Cp942, defina o nome dela explicitamente em um mtodo
       ou como um parmetro. Estas tabelas fazem as seguintes converses:</p>


<H3>Para Caracteres SBCS</H3>
<TABLE BORDER=2 CELLSPACING=2 CELLPADDING=2 COLS=5>
<TR ALIGN=CENTER>
     <TD>&nbsp;
     <TD COLSPAN=2><b>Cdigo de PC</b>
     <TD COLSPAN=2><b>Unicode</b>
</TR>
<TR>
     <TD><b>Pgina de Cdigo</b>
     <TD><b>Ponto de Cdigo</b>
     <TD><b>Caractere</b>
     <TD><b>Ponto de Cdigo</b>
     <TD><b>Caractere</b>
</TR>
<TR>
     <TD>SJIS
     <TD>0x00-0x7F
     <TD>Corresponde ao Unicode
     <TD>U0000-U007F
     <TD>Corresponde ao Cdigo de PC
</TR>
<TR>
     <TD>Cp942C
     <TD COLSPAN=2>Corresponde ao Unicode
     <TD COLSPAN=2>Corresponde ao Cdigo de PC

</TR>
<TR>
     <TD>Cp943C
     <TD COLSPAN=2>Corresponde ao Unicode
     <TD COLSPAN=2>Corresponde ao Cdigo de PC

</TR>
<TR>
     <TD>Cp942
     <TD>0x00-0x5B
     <TD>Corresponde ao Unicode
     <TD>U0000-U005B
     <TD>Corresponde ao Cdigo de PC
</TR>
<TR>
     <TD>Cp943
     <TD>0x5c
     <TD>Iene
     <TD>U00A5
     <TD>Iene
</TR>
<TR>
     <TD>
     <TD>0x5D-0x7D
     <TD>Corresponde ao Unicode
     <TD>U005D-U007D
     <TD>Corresponde ao Cdigo de PC
</TR>
<TR>
     <TD>
     <TD>0x7e
     <TD>Sobrelinha
     <TD>U203E
     <TD>Sobrelinha
</TR>
<TR>
     <TD>
     <TD>0x7F
     <TD>Corresponde ao Unicode
     <TD>U007F
     <TD>Corresponde ao Cdigo de PC
</TR>
<TR>
     <TD>
     <TD>0x80
     <TD>Sinal de Centavo
     <TD>U00A2
     <TD>Sinal de Centavo
</TR>
<TR>
     <TD>
     <TD>0xA0
     <TD>Sinal de Libra
     <TD>U00A3
     <TD>Sinal de Libra Esterlina
</TR>
<TR>
     <TD>
     <TD>0xFD
     <TD>Sinal Negativo
     <TD>U00A7
     <TD>Sinal Negativo
</TR>
<TR>
     <TD>
     <TD>0xFE
     <TD>Barra Invertida
     <TD>U005C
     <TD>Barra Invertida
</TR>
<TR>
     <TD>
     <TD>0xFF
     <TD>Til
     <TD>U007E
     <TD>Til
</TR>
</table>
</p>
       <p>Por exemplo, na tabela Cp943C, o cdigo de PC para a faixa
       0x00 - 0x7F  convertido diretamente em Unicode para a faixa U0000 - U007F.
Na tabela Cp942, o sinal de Iene do cdigo PC 
       convertido ao sinal de Iene (U00A5) do Unicode.</p>


       <p>       Para caracteres DBCS:</p>

        <UL>
       <LI>Nas tabelas Cp943, Cp943C e SJIS, o cdigo de PC  considerado como a nova
       ordem JIS.

       <LI>Nas tabelas Cp942 e Cp942C, o cdigo PC  considerado como
       a antiga ordem JIS.
</ul>

<p>       Para Caracteres Definidos Pelo Usurio e Caracteres Estendidos IBM:</p>
<UL>
<LI>Nas tabelas Cp943 e Cp943C, esses caracteres de cdigo de PC so convertidos
em Unicode.

       <LI>Na tabela SJIS, esses caracteres de cdigo PC NO so convertidos
       para Unicode.

       <LI>Nas tabelas Cp942 e Cp942C, esses caracteres de cdigo de PC so convertidos
       em Unicode.
</UL>

<HR>
<H2><A NAME="Header_14" HREF="#ToC_14">Limitaes Conhecidas</A></H2>
<UL>
<LI>
O compilador just-in-time (JIT) otimiza o rastreamento do mtodo de sada (opo <B>-tm</B>)
e o traado de perfil. Para obter rastreamento e traado de perfil completos do mtodo voc deve desativar o JIT. Consulte
<A HREF=runtime.htm#JIT>Como Desativar o Compilador JIT</A>
na
<A HREF=runtime.htm>documentao do Tempo de Execuo</A> para obter detalhes.
<P><LI>Quando o compilador JIT  ativado, uma exceo no apanhada gera um
rastreamento de retorno sem os nmeros de linhas de origem. Voc deve
<A HREF=runtime.htm#JIT>desativar o JIT</A>
e executar novamente a aplicao que falhou para obter um rastreamento de retorno com os nmeros de linhas.

</UL>
<HR>
<H2><A NAME="Header_15" HREF="#ToC_15">Avisos</A></H2>
<P>Marcas
<P>Os seguintes termos so marcas da International Business Machines
Corporation nos Estados Unidos ou em outros pases, ou em ambos:
<UL>
<LI>IBM</LI>
<LI>OS/2</LI>
</UL>
<p>Os termos a seguir so marcas de outras empresas:
<UL>
<LI>Java e 100% Pure Java so marcas da Sun Microsystems, Inc.
<LI> A tecnologia Java(TM) pertence e  exclusivamente licenciada pela Sun Microsystems,
Inc. Java  marca da Sun Microsystems, Inc. nos Estados Unidos e em outros pases. 
</UL>
<P>Copyrights
<UL>
<LI> (c) Copyright Sun Microsystems, Inc. 1992-1998. Todos os direitos reservados.
<LI> (c) Copyright IBM Corporation, 1996-1998. Todos os direitos reservados.
<LI> Esse produto  baseado, em parte, no trabalho do Independent JPEG Group.
<LI> US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
</UL>

</BODY></HTML>
