Te lo comento como lo hago yo, te pongo un ejemplo que tengo hecho, asi es mas fácil.
En la calse del Main tienes que declarar la IP del propio PC o del PC con el que te vas a comunicar en caso de ser dos pcs.
En el método Main, debes llamar a la Interfaz remota, y depues debes hacer una llamada remota al servidor RMI local, eso lo haces con Naming.rebind lo haces a la IP de antes, y metes la interfaz declarada, debes capturar la excepción.
Ejemplo:
import java.rmi.*;
public class Parque extends Thread
{
/**IP necesaria para conectarse al cliente RMI**/
private static String IP = "127.0.0.1";
/**
* Metodo principal que inicia toda la aplicación
* @param args: Argumentos pasados para iniciar la aplicación
*/
public static void main(String[] args)
{
//Inicio del servidor RMI
try
{
ImplInterfaz [b]Impl[/b] = new ImplInterfaz();
Naming.rebind("//" + IP + "/ObjetoImpl", [b]Impl[/b]);
System.out.println("Objeto Impl registrado");
}
catch (Exception e)
{
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
}
}
}
He omitido lo que no te vale. este sería el Main para el servidor RMI, fíjate en la negrita
Ahora debemos crear la interfaz con lso métodos creados que es a la que llamamos en el main anterior.
package parque;
import java.rmi.*;
import java.rmi.server.*;
public class ImplInterfaz [b]extends UnicastRemoteObject[/b] implements InterfaceMetodos
{
/**Instancia de la clase Contador_Cola_Noria*/
private Contador_Cola_Noria CNoria = new Contador_Cola_Noria();
/**Instancia de la clase Contador_Cola_Tiovivo*/
private Contador_Cola_Tiovivo CTiovivo = new Contador_Cola_Tiovivo();
/**Instancia de la clase Cola_Terror*/
private Cola_Terror CTerror = new Cola_Terror();
/**Instancia de la clase Cola_Espejos*/
private Cola_Espejos CEspejos = new Cola_Espejos();
/**Instancia de la clase Noria*/
private Noria EstNoria = new Noria();
/**Instancia de la clase Panel_Noria*/
private Panel_Noria PNoria = new Panel_Noria();
/**
* Constructor
* @throws RemoteException
*/
public ImplInterfaz() throws RemoteException
{
}
/**
* Metodo de que nos da el numero de personas en la cola de la noria
* @return CNoria.contador_cola_noria: Numero de personas en al cola de la noria
* @throws RemoteException
*/
public int ColaNoria() [b]throws RemoteException[/b]
{
//Nos da la cola de la noria
return CNoria.contador_cola_noria;
}
/**
* Metodo de que nos da el numero de personas en la cola del tiovivo
* @return CTiovivo.contador_cola_tiovivo: Numero de personas en al cola del tiovivo
* @throws RemoteException
*/
public int ColaTiovivo () throws RemoteException
{
//Nos da la cola del Tiovivo
return CTiovivo.contador_cola_tiovivo;
}
/**
* Metodo de que nos da el numero de personas en la cola de los espejos
* @return CEspejos.contador_cola_espejos: Numero de personas en al cola de lso espejos
* @throws RemoteException
*/
public int ColaEspejos() throws RemoteException
{
//Nos da la cola de los Espejos
return CEspejos.contador_cola_espejos;
}
/**
* Metodo de que nos da el numero de personas en la cola del terror
* @return CTerror.contador_cola_terror: Numero de personas en la coal del terror
* @throws RemoteException
*/
public int ColaTerror() throws RemoteException
{
//Nos da la cola del Terror
return CTerror.contador_cola_terror;
}
/**
* Metodo que nos permite abrir la noria
* @throws RemoteException
*/
public void Abrir_Noria() throws RemoteException
{
EstNoria.Abrir_Noria();
}
/**
* Metodo que nos permite cerrar la noria
* @throws RemoteException
*/
public void Cerrar_Noria() throws RemoteException
{
EstNoria.Cerrar_Noria();
}
/**
* Metodo que nos permite poner la etiqueta de "Noria Abierta"
* @throws RemoteException
*/
public void Etiqueta_Noria_Abierta() throws RemoteException
{
PNoria.etiqueta_abierta_noria();
}
/**
* Metodo que nos permite poner la etiqueta de "Noria Cerrada"
* @throws RemoteException
*/
public void Etiqueta_Noria_Cerrada() throws RemoteException
{
PNoria.etiqueta_cerrada_noria();
}
}
Esto no tiene mas misterio que crear una interfaz con la implementación de lso métodos a lso que vamso a llamar o los métodos que qeuramos enviar. Fijate en la parte en negrita, y obvia las excepciones remotas.
Despues de esto debemos declarar otra interfaz declarando los métodos, que es a traves de la que accederemos a ellos
Ahi va
package parque;
import java.rmi.*;
public interface InterfaceMetodos extends Remote
{
/**Metodo que nos dará las persoans de la cola de la noria*/
int ColaNoria() throws RemoteException;
/**Metodo que nos dará las persoans de la cola del tiovivo*/
int ColaTiovivo() throws RemoteException;
/**Metodo que nos dará las persoans de la cola de los espejos*/
int ColaEspejos() throws RemoteException;
/**Metodo que nos dará las persoans de la cola del terror*/
int ColaTerror() throws RemoteException;
/**Metodo que nos abrirá la Noria*/
void Abrir_Noria() throws RemoteException;
/**Metodo que nos cerrará la Noria*/
void Cerrar_Noria() throws RemoteException;
/**Metodo para establecer la etiqueta "NORIA ABIERTA"*/
void Etiqueta_Noria_Abierta() throws RemoteException;
/**Metodo para establecer la etiqueta "NORIA CERRADA"*/
void Etiqueta_Noria_Cerrada() throws RemoteException;
}
No tiene mas misterio que declarar los métodos implementados
Y por último el cliente RMI
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.rmi.*;
import java.net.*;
public class ControlesCliente extends JPanel implements ActionListener
{
/**Variable que contiene la IP a la que se va a pedir lso objetos remotos*/
private static String IP = "127.0.0.1";
/**
* Metodo que captura los eventos para realizar las opciones que se nos
* permiten, tales como refrescar las colas, abrir o cerrar la noria
* @param ae: Variable que captura los eventos
*/
public void actionPerformed(ActionEvent ae)
{
//Cerrar la noria
if (ae.getSource() == Boton_Cerrar_Noria)
{
try
{
//Llamamos al objeto remoto
[b]InterfaceMetodos Impl = (InterfaceMetodos)Naming.lookup("//" + IP + "/ObjetoImpl");[/b]
//Llamamos la metodo remoto
[b]Impl.Cerrar_Noria();
Impl.Etiqueta_Noria_Cerrada();[/b]
}
catch (Exception e)
{
}
}
//Abrir la noria
if (ae.getSource()== Boton_Abrir_Noria)
{
try
{
//Llamamos al objeto remoto
[b]InterfaceMetodos Impl = (InterfaceMetodos) Naming.lookup("//" + IP + "/ObjetoImpl");[/b]
//Llamamos al metodo remoto
[b]Impl.Abrir_Noria();
Impl.Etiqueta_Noria_Abierta();[/b]
}
catch (Exception e)
{
}
}
//Refrescar la visualización del estado de las colas
if (ae.getSource() == Boton_Refrescar)
{
try
{
//Llamamos al objeto remoto
[b]InterfaceMetodos Impl = (InterfaceMetodos)Naming.lookup("//" + IP + "/ObjetoImpl");[/b]
//Llamamos a los metodos remotos
[b]Noria = Impl.ColaNoria();
Tiovivo = Impl.ColaTiovivo();
Espejos = Impl.ColaEspejos();
Terror = Impl.ColaTerror();
Etiqueta_Noria_Estado.setText(String.valueOf(Noria));
Etiqueta_Espejos_Estado.setText(String.valueOf(Espejos));
Etiqueta_Tiovivo_Estado.setText(String.valueOf(Tiovivo));
Etiqueta_Terror_Estado.setText(String.valueOf(Terror));[/b]
}
catch (Exception e)
{
}
}
}
}
Fíjate de nuevo en la negrita desde ahi llamamos a los métodos remotos.
Si tienes alguna duda dimelo.
Para arrancar todo el rollo del server RMI etc etc, yo lo haría por linea de comandos, yo fui incapaz de hacerlo correr ni desde Jbuilder, Netbeans, ni Jcreator
Saludos
P.D: Yo te recomiendo que hagas una GUI para el servidor y otra GUI para el cliente de la aplicación