Java: RMI调用实例2

来源:互联网 发布:mac photoshop cc 破解 编辑:程序博客网 时间:2024/05/29 14:07
服务端的接口
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();
    }

    
    
}

原创粉丝点击