Java: RMI调用实例2

服务端的接口
package  practice;

import  java.rmi. * ;

public   interface  ServiceServer  extends  Remote  {
    Object[] getServiceList() 
throws RemoteException;
    Service getService(Object serviceKey) 
throws RemoteException;
}

服务端实现
package  practice;

import  java.util. * ;
import  java.rmi. * ;
import  java.rmi.server. * ;
 
public   class  ServiceServerImpl  extends  UnicastRemoteObject  implements  ServiceServer {
    
private static final long serialVersionUID = -4807659989722643845L;
    HashMap
<String, Object> serviceList;
    
public ServiceServerImpl() throws RemoteException{
        setUpServices();
    }

    
private void setUpServices(){
        serviceList 
= new HashMap<String, Object>();
        serviceList.put(
"Dice Rolling Service"new DiceService());
        serviceList.put(
"Day of week service"new DayOfWeekService());
        
//serviceList.put("Visual Music Service", new MiniMusicService());
    }

    
    
public Service getService(Object key) throws RemoteException{
        
return (Service)serviceList.get(key);
    }

    
    
public Object[] getServiceList() throws RemoteException{
        
return serviceList.keySet().toArray();
    }

    
    
public static void main(String[] args){
        
try{
            ServiceServerImpl server 
= new ServiceServerImpl();
            Naming.rebind(
"ServiceServerX", server);
        }
catch(Exception e){
            e.printStackTrace();
        }

    }

}

 
客户端实现
package  practice;

import  javax.swing. * ;
import  javax.swing.event. * ;
import  java.awt. * ;
import  java.awt.event. * ;
import  java.rmi. * ;

public   class  ServiceBrowser  {
    JPanel panel;
    ServiceServer server;
    JComboBox serviceList;
    
    
public static void main(String[] args){
        
new ServiceBrowser().go();
    }

    
    
private void  go(){
        buildGUI();
    }

     
    
private void buildGUI(){
        JFrame frame 
= new JFrame("RMI Browser");
        panel 
= new JPanel();
        
        Object[] services 
= getServiceList();
        serviceList 
= new JComboBox(services);
        serviceList.addActionListener(
new ChooseActionListener());
        
        frame.getContentPane().add(BorderLayout.CENTER, panel);
        frame.getContentPane().add(BorderLayout.NORTH, serviceList);
        
        frame.setSize(
400500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(
true);
    }

    
    
private Object[] getServiceList(){
        Object[] serviceList 
= null;
        
try{
            server 
= (ServiceServer)Naming.lookup("ServiceServerX");
            serviceList 
= server.getServiceList();
        }
catch(Exception e){
            e.printStackTrace();
        }

        
return serviceList;
    }

    
    
class ChooseActionListener implements ActionListener{
        
public void actionPerformed(ActionEvent evetn){
            loadService(serviceList.getSelectedItem());
        }

    }

    
    
private void loadService(Object selection){
        
try{
            Service service 
= server.getService(selection);
            panel.removeAll();
            panel.add(service.getGuiPanel());
            panel.validate();
            panel.repaint();
        }
catch(Exception e){
            e.printStackTrace();
        }

    }

}


服务接口
package  practice;
 
import  javax.swing. * ;
import  java.io. * ;

public   interface  Service  extends  Serializable {
    
public JPanel getGuiPanel();
}


服务
package  practice;

import  javax.swing. * ;
import  javax.swing.event. * ;
import  java.awt. * ;
import  java.awt.event.ActionEvent;
import  java.awt.event.ActionListener;

public   class  DiceService  implements  Service {
    
private static final long serialVersionUID = 9088576826000018846L;
    JLabel result;
    JComboBox diceNum;
    
public JPanel getGuiPanel(){
        JPanel panel 
= new JPanel();
        
        String[] choice 
= {"1""2""3""4""5"};
        diceNum 
= new JComboBox(choice);
        
        JButton startButton 
= new JButton("Start Roll");
        startButton.addActionListener(
new CreateDiceActionListener());
        
        result 
= new JLabel("Please Click Start Roll");
        
        panel.add(diceNum);
        panel.add(startButton);
        panel.add(result);
        
return panel;
    }
 
    
class CreateDiceActionListener implements ActionListener{
        
public void actionPerformed(ActionEvent event){
            result.setText(getRandomNum(diceNum.getSelectedItem()));
        }

    }

    
    
private String getRandomNum(Object Num){
        
try{
            
int diceNum = Integer.parseInt((String)Num);
            String result 
= "";
            
for(int i=0 ;i<diceNum; i++){
                result 
+= (int)(Math.random()*6+ "  ";
            }

            
return result;
        }
catch(Exception e){
            e.printStackTrace();
        }

        
return null;
    }

}



服务2
package  practice;

import  java.awt.GridLayout;
import  java.awt.event.ActionEvent;
import  java.awt.event.ActionListener;
import  java.text.SimpleDateFormat;
import  java.util.ArrayList;
import  java.util.Calendar;
import  java.util.Date;

import  javax.swing.JButton;
import  javax.swing.JComboBox;
import  javax.swing.JLabel;
import  javax.swing.JPanel;

public   class  DayOfWeekService  implements  Service {
    JLabel result;
    JComboBox year;
    JComboBox month;
    JComboBox day;
    
    
public JPanel getGuiPanel(){
        JPanel panel 
= new JPanel();
        
        JPanel innerPanel 
= new JPanel(new GridLayout(3,2));
        
        year 
= new JComboBox(getArray(1950,2007));
        month 
= new JComboBox(getArray(1,12));
        day 
= new JComboBox(getArray(1,31));
        innerPanel.add(
new JLabel("Year"));
        innerPanel.add(year);
        innerPanel.add(
new JLabel("Month"));
        innerPanel.add(month);
        innerPanel.add(
new JLabel("Day"));
        innerPanel.add(day);
        
        JButton startButton 
= new JButton("Start Compute");
        startButton.addActionListener(
new ComputeWeekActionListener());
        
        result 
= new JLabel();
        
        panel.add(innerPanel);
        panel.add(startButton);
        panel.add(result);
        
        
return panel;
    }

    
class ComputeWeekActionListener implements ActionListener{
        
public void actionPerformed(ActionEvent event){
            result.setText(getWeek());
        }

    }

    
    
private Object[] getArray(int start, int stop){
        ArrayList
<Integer> list = new ArrayList<Integer>();
        
for(int i=start;i<=stop;i++){
            list.add(i);
        }

        
return list.toArray();
    }

    
    
private String getWeek(){
        
try{
            
int y = getSelectedInt(year);
            
int m = getSelectedInt(month);
            
int d = getSelectedInt(day);
            Calendar c 
= Calendar.getInstance();
            c.setTime(
new Date());
            
            c.set(Calendar.MONTH, m
-1);
            c.set(Calendar.DAY_OF_MONTH, d);
            c.set(Calendar.YEAR, y);
            
            
            Date date 
= c.getTime();
            
return (new SimpleDateFormat("EEEE")).format(date);
        }
catch(Exception e){
            e.printStackTrace();
        }

        
return null;
    }

    
    
private int getSelectedInt(JComboBox in){
        
return (Integer)in.getSelectedItem();
    }

    
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值