2012-11-30 69 views
1

我正在用RMI創建一個簡單聊天應用程序,但我無法識別確切問題在哪裏? 這是我的代碼:在java中使用RMI的簡單聊天應用程序中的錯誤

ChatServer.java

import java.awt.Point; 
import java.net.MalformedURLException; 
import java.rmi.AlreadyBoundException; 
import java.rmi.Naming; 
import java.rmi.RemoteException; 
import java.rmi.server.UnicastRemoteObject; 
import java.util.ArrayList; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/** 
* 
* @author nick 
*/ 
public class ChatServer extends UnicastRemoteObject implements IChat{ 

    ArrayList<String> list = new ArrayList<String>(); 

    public ChatServer() throws RemoteException{ 
     try { 
      Naming.bind("//localhost:1099/chat", this); 
     } catch (Exception ex) { 

      ex.printStackTrace(); 

     } 

     System.out.println("Chat Server Ready"); 
    } 




    public void put(Point p) throws RemoteException{ 

     p.getX(); 
     p.getY(); 

    } 
/* 
    public ArrayList<String> get() throws RemoteException{ 

     return list; 

    } */ 
    public ArrayList<String> get() throws RemoteException 
    { 
     return list; 
    } 

    public static void main(String[] args) { 
     try { 
      new ChatServer(); 
     } catch (RemoteException ex) { 
      Logger.getLogger(ChatServer.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 


} 

ChatClient.java

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import java.rmi.Naming; 
import java.rmi.Remote; 
import java.rmi.RemoteException; 
import java.util.ArrayList; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
/** 
* 
* @author nick 
*/ 
public class ChatClient extends JFrame implements Runnable, ActionListener, MouseListener, MouseMotionListener { 

    String TAG = "kushal "; 
    IChat ic; 
    int oldx, oldy; 
    JTextField jtf; 
    JTextArea jta; 

    public ChatClient() { 
     try { 
      Remote remote = Naming.lookup("//localhost:1099/chat"); 
      ic = (IChat) remote; 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 



     setSize(300, 300); 
     setVisible(true); 

     Thread t = new Thread(this); 
     t.start(); 
    } 

    public void paint(Graphics g) { 
    } 

    public void run() { 
     while (true) { 
      try { 
       ArrayList<Point> list = ic.get(); 
       Thread.sleep(1000); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 

      } 

     } 
    } 

    public static void main(String[] args) { 
     new ChatClient(); 
    } 

    public void actionPerformed(ActionEvent e) { 
     /* try { 
      ic.put(TAG + jtf.getText()); 
      jtf.setText(""); 
     } catch (RemoteException ex) { 
      Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex); 
     }*/ 

    } 

    public void mouseClicked(MouseEvent e) { 
    } 

    public void mousePressed(MouseEvent e) { 
     oldx = e.getX(); 
     oldy = e.getY(); 


    } 

    public void mouseReleased(MouseEvent e) { 
    } 

    public void mouseEntered(MouseEvent e) { 
    } 

    public void mouseExited(MouseEvent e) { 
    } 

    public void mouseDragged(MouseEvent e) { 
     Graphics g = getGraphics(); 

     int x = e.getX(); 
     int y = e.getY(); 
     g.drawLine(oldx, oldy, x, y); 
     oldx = x; 
     oldy = y; 


    } 

    public void mouseMoved(MouseEvent e) { 
    } 
} 

IChat.java

import java.awt.Point; 
import java.rmi.Remote; 
import java.rmi.RemoteException; 
import java.util.ArrayList; 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/** 
* 
* @author new 
*/ 
public interface IChat extends Remote{ 

    public void put(Point p) throws RemoteException; 
    public ArrayList<Point> get() throws RemoteException; 
} 

錯誤ChatServer.java:的ChatServer不是抽象的,在iChat中的ChatServer不重寫抽象get()方法

get()方法無法實現在iChat 返回類型的ArrayList的get()不兼容ArrayList ----

任何幫助將是偉大的。

在此先感謝。

回答

1

-不創建ImplementationInterface

例如:

IChatImpl implements IChat{ 

    public void put(Point p) throws RemoteException{ 



    } 

    public ArrayList<Point> get() throws RemoteException{ 




    } 
} 

////////////////////////////////編輯的部分/////////////////////////////

我想你還沒有重寫這個方法......

public ArrayList<String>

它應該是....

public ArrayList<Point>

+0

但我在這裏實現服務器中的IChat。請你詳細說明一下你的答案.. –

+0

@nick,你需要4個類...... ChatInterface,ChatInterfaceImpl,ChatServer,ChatClient。 –

+0

我不這麼認爲。實現IChat的ChatServer是完全有效的。即使你是對的,也不應該拋出這個異常。 @KumarVivekMitra – 11684

0

這裏還有其他的問題,但是連接異常的原因是,你有沒有在服務器主機上啓動RMI註冊。