Java
210 pág.

Java


DisciplinaProgramação Orientada A Objetos3.948 materiais57.615 seguidores
Pré-visualização43 páginas
} catch(RemoteException e) {
 System.err.println("Ocorreu um erro relativo ao RMI: " + 
e.getMessage());
 e.printStackTrace();
 System.exit(0);
 } catch(Exception e) {
 System.err.println("Ocorreu um erro desconhecido: " + 
e.getMessage());
 e.printStackTrace();
 System.exit(0);
 } 
 }
}
A linha:
IForum forumObj = (IForum)Naming.lookup("rmi://localhost/forumService");
Efetua uma consulta no host informado (neste caso o localhost) e solicita o objeto associado ao nome: forumService.
O resto do código fala por si só, e graças ao RMI as chamadas são idênticas á chamadas locais. Melhorando um
pouco o design da aplicação é possível criar um objeto local ou então um remoto dependendo da ocasião.
Para facilitar o teste, a classe abaixo foi criada apenas para permitir rodar o serviço através da linha de comando:
"java -jar arquivoJar.jar"
package rmiknolexample;
/**
 *
 * @author Andre
 */
public class Main {
 /**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
 if (args[0].equals("server"))
 ForumService.main(args);
 else if (args[0].equals("client"))
 ForumClient.main(args);
 else
 System.err.println("Usage: ");
 }
RMI 178
}
pronto! Para executar basta compilar as classes, iniciar o aplicativo rmiregistry que é o responsável por encontrar e
disparar as chamadas aos objetos corretos e iniciar o servidor em um terminal ou prompt.
Após isso feito abra outro terminal ou prompt e inicie a aplicação cliente.
Observação importante: neste caso o teste é apenas local mas quando utiliza-se um ambiente com diversas máquinas
é muito importante iniciar a aplicação servidor com a opção: -Djava.rmi.server.hostname=<nome_ou_ip_do_host>.
Caso não seja feito o objeto pode ser exportado com o host errado e a aplicação cliente pode tentar disparar o
procedimento em um endereço diferente do solicitado.
Existem diversas outras características da tecnologia RMI que não foram abordadas, como por exemplo a capacidade
de baixar o código de uma determinada classe de modo transparente. Assim mesmo que o contexto local não
reconheça uma classe esta será transferida do servidor e poderá ser utilizada pela aplicação.
Fontes e referências
\u2022 Informações sobre RMI - Sun [1]
\u2022 Java RMI - André Luiz Alves Moraes [2]
Referências
[1] http:/ / java. sun. com/ javase/ technologies/ core/ basic/ rmi/ index. jsp
[2] http:/ / knol. google. com/ k/ andr%C3%A9-luiz-alves-moraes/ java-rmi/ n6m12v5sl0jh/ 1
Referência/JVM
JVM (Java Virtual Machine)
Referência/java 179
Referência/java
class Olamundo {
 public static void main(String[] args) {
 System.out.println(&quot;Olá mundo!!&quot;); //Imprime na tela
 }
}
Referência/javac
class OlaMundo 
{ 
 public static void main(String[] args) 
 { 
 System.out.println(\u201cOlá mundo!\u201d); 
 } 
}
Referência/main
Main é a função por onde o programa começa. Ela deve ser criada dentro do escopo de alguma classe.
Swing 180
Swing
Swing é uma API Java para interfaces gráficas. Ela é compatível com a API AWT, mas trabalha de uma maneira
totalmente diferente. A API Swing procura renderizar\desenhar por contra própria todos os componentes, ao invés de
delegar essa tarefa ao sistema operacional, como a maioria das outras APIs de interface gráfica trabalham.
Por ser uma API de mais alto nível, ou seja, mais abstração, menor aproximação das APIs do sistema operacional,
ela tem bem menos performace que outras APIs gráficas e consome mais memória RAM em geral. Porém, ela é bem
mais completa, e os programas que usam Swing têm uma aparência muito parecida, independente do Sistema
Operacional utilizado.
Este capítulo segue a estrutura do livro Programação em GUI
Índice
\u2022\u2022 Primeiro programa
\u2022\u2022 Widgets
\u2022\u2022 Eventos e Action listeners
Swing/Eventos e Action listeners
A comunicação entre os diversos widgets é feita através de eventos (events, em inglês) e de action listeners. Os
conceitos estão explicados no livro Programação em GUI, capítulo Eventos, sinais, slots e callbacks.
Primeira tentativa
O objetivo é criar um programa que mostre um botão (com a string OK) e uma caixa de texto. Ao clicar-se no botão,
a caixa de texto responde, apresentando a string OK.
Para começar, vamos escrever o esqueleto do programa:
// arquivo swing_button_1.java
// inicio do programa swing_button - versao 1.0
import javax.swing.*; //All swing components live
 //in the javax.swing package
import java.awt.*;
import java.awt.event.*;
// many widgets under a box
public class swing_button_1 {
 
 public static void main(String[] args) {
 // creates the Frame
 JFrame frame = new JFrame(&quot;swing_button_1&quot;);
 // defines frame
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Swing/Eventos e Action listeners 181
 
 // creates the (vertical) box
 Box vbox = new Box(BoxLayout.Y_AXIS);
 // places the box inside the frame
 frame.add(vbox);
 
 // creates the elements of the vbox
 // creates the button
 JButton button1 = new JButton(&quot;OK&quot;);
 JTextField entry1 = new JTextField(&quot;&quot;);
 // add button and textfield inside the vbox
 vbox.add(button1);
 vbox.add(entry1);
 // set frame to a decent size (default is a small frame)
 frame.setSize(212, 258);
 
 // makes frame (and everything in it) visible 
 frame.setVisible(true);
 }
}
// fim do programa swing_button - versao 1
O programa acima não faz nada: pode-se clicar no botão, mas isto não tem efeitos. Precisamos incluir dois
elementos:
\u2022 o botão button1 deve incluir um actionListener, para que o clicar nele tenha algum efeito
\u2022 a caixa de texto entry1 deve incluir um actionPerformed, para que ela reaja ao clicar do botão
Incluir um actionListener no botão é muito simples: basta chamar o membro addActionListener, passando como
argumento um objeto do tipo ActionListener:
 button1.addActionListener(al);
Já a criação do actionListener é mais complicada. Um actionListener deve ter um membro actionPerformed; assim,
poderíamos ter:
 ActionListener al = new ActionListener() {
 public void actionPerformed(ActionEvent e) {
 System.out.println(&quot;OK&quot;);
 }
 };
A versão preliminar do código, que ainda não faz aparecer &quot;OK&quot; na caixa de texto, mas faz aparecer &quot;OK&quot; na
console, é:
// programa swing_button_1.java
// inicio do programa swing_button - versao 1.1
import javax.swing.*; //All swing components live
Swing/Eventos e Action listeners 182
 //in the javax.swing package
import java.awt.*;
import java.awt.event.*;
// many widgets under a box
public class swing_button_1 {
 
 public static void main(String[] args) {
 // creates the Frame
 JFrame frame = new JFrame(&quot;swing_button_1&quot;);
 // defines frame
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
 
 // creates the (vertical) box
 Box vbox = new Box(BoxLayout.Y_AXIS);
 // places the box inside the frame
 frame.add(vbox);
 
 // creates the elements of the vbox
 // creates the button
 JButton button1 = new JButton(&quot;OK&quot;);
 JTextField entry1 = new JTextField(&quot;&quot;);
 // ActionListener: makes button1 iteract with the System