基于RMI技术的远程词典应用Word格式文档下载.docx
《基于RMI技术的远程词典应用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于RMI技术的远程词典应用Word格式文档下载.docx(6页珍藏版)》请在冰豆网上搜索。
8)启动服务器;
9)启动客户,完成应用。
3.基于RMI技术的远程词典应用的实现
在实现基于RMI技术的远程词典应用的过程中,主要实现了三部分:
定义的远程接口,实现远程接口以及服务器端应用服务实现,应用客户端的图形实现。
(1)远程接口的实现
在远程接口的类中,声明了一个返回字符串的translator方法。
实现的代码如下:
packagetranslatorInterface;
importjava.rmi.Remote;
importjava.rmi.RemoteException;
/**
*@author苑仁群
*@since2012.6.4
*/
publicinterfaceTranslatorInextendsRemote{
*
*@paramword输入待查询的单词
*@return返回所查单词的结果
*@throwsRemoteException
publicStringtranslator(Stringword)throwsRemoteException;
}
(2)应用服务端实现
在应用服务端实现了定义的远程接口,并且进行了服务端端口的注册,以及通信路径的
注册。
实现定义的远程接口的代码如下:
packageserver;
importjava.rmi.server.UnicastRemoteObject;
importjava.util.HashMap;
importjava.util.Map;
importtranslatorInterface.TranslatorIn;
publicclassTranslatorImextendsUnicastRemoteObjectimplementsTranslatorIn{
privatestaticfinallongserialVersionUID=1L;
privateMap<
String,String>
dic=newHashMap<
();
protectedTranslatorIm()throwsRemoteException{super();
dic.put("
distribution"
"
n.分布;
分配"
);
dic.put("
system"
n.系统;
方法;
制度,体制"
@Override
publicStringtranslator(Stringword){
Stringresult=null;
result=dic.get(word);
if(result==null||result.equals("
"
))
result="
抱歉,您查找的单词不存在"
;
returnresult;
进行服务端口注册以及通信路径注册的代码如下:
import.MalformedURLException;
importjava.rmi.AlreadyBoundException;
importjava.rmi.Naming;
importjava.rmi.registry.LocateRegistry;
importtranslatorInterface.TranslatorIn;
publicclassServer{
public static void main(String arg[]) throws MalformedURLException,AlreadyBoundException{
try{
TranslatorIndicServer=newTranslatorIm();
LocateRegistry.createRegistry(10002);
//注册通信端口Naming.bind("
rmi:
//127.0.0.1:
10002/dicServer"
dicServer);
//注册通信路径
}catch(RemoteExceptione){e.printStackTrace();
(3)客户端应用的实现
客户端实现的代码中,其核心方法主要为查找通信路径的Naming.lookup()方法,其代码如下:
packageclient;
importjava.awt.BorderLayout;
importjava.awt.EventQueue;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjavax.swing.BoxLayout;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
importjavax.swing.JTextArea;
importjavax.swing.JLabel;
publicclassDicClient{
privateJFrameframe;
privateJTextFieldword;
privateTranslatorIntranslatorIntf;
privateJTextAreafindResult;
privateJPanelpanel_1;
privateJLabellblNewLabel;
privateJLabellblNewLabel_1;
publicstaticvoidmain(String[]args){EventQueue.invokeLater(newRunnable(){
publicvoidrun(){try{
DicClientdicClient=newDicClient();
dicClient.frame.setVisible(true);
}catch(Exceptione){e.printStackTrace();
});
publicDicClient(){initialize();
try{
translatorIntf=(TranslatorIn)Naming.lookup("
}catch(Exceptione){
findResult.setText("
暂时无法连接到服务器,服务器可能没有运行!
*窗口的初始化
privatevoidinitialize(){
frame=newJFrame();
frame.setTitle("
欢迎使用词典客户端^_^"
frame.setBounds(100,100,300,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanelpanel=newJPanel();
frame.getContentPane().add(panel,BorderLayout.NORTH);
panel.setLayout(newBoxLayout(panel,BoxLayout.X_AXIS));
lblNewLabel_1=newJLabel("
请输入单词:
panel.add(lblNewLabel_1);
word=newJTextField();
panel.add(word);
word.setColumns(8);
JButtonbtnTrans=newJButton("
查询"
btnTrans.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEventarg0){Stringkeywords=word.getText();
if(keywords.trim().isEmpty()||keywords.trim().equals("
)
||keywords.trim()==null)findResult.setText("
输入的单词不能为空"
else{
Stringmeaning=translatorIntf.translator(keywords);
findResult.setText(meaning);
}catch(Exceptione){translatorIntf=null;
暂时无法连接到服务器,服务器可能没有运行!
panel.add(btnTrans);
panel_1=newJPanel();
frame.getContentPane().add(panel_1,BorderLayout.CENTER);
panel_1.setLayout(newBorderLayout(0,0));
lblNewLabel=newJLabel("
查询结果:
panel_1.add(lblNewLabel,BorderLayout.NORTH);
findResult=newJTextArea();
findResult.setEditable(false);
panel_1.add(findResult,BorderLayout.CENTER);
4.运行界面
1.没有启动服务端时,客户端的运行界面如下:
2.启动服务器后,客户端的运行界面如下