服务端的接口
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(400, 500);
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();
}
}








服务端实现





































客户端实现



































































服务接口









服务

















































服务2
























































































