import java.awt.*; import javax.swing.*; import java.rmi.server.*; import java.rmi.*; import java.util.*; import java.awt.event.*; class Client extends JFrame implements Runnable{ RemoteServer remoteServer = null; int xLim = 500, yLim = 500, rMax = 70; public Client(String host){ super(); setSize(xLim, yLim); this.addKeyListener(new KeyListener()); show(); String url = "rmi://" + host + "/"; try{ remoteServer = (RemoteServer)Naming.lookup(url + "server"); }catch(Exception e){ } } public void run(){ Graphics g = getGraphics(); Vector ballsRaw = null; try { ballsRaw = remoteServer.getBalls(); }catch(RemoteException re){ System.out.println("Exception generated: " + re.getMessage()); } for(int i = 0; i < ballsRaw.size(); i = i + 3) { int x = (Integer)ballsRaw.elementAt(i); int y = (Integer)ballsRaw.elementAt(i + 1); int r = (Integer)ballsRaw.elementAt(i + 2); int blue = r * 255 / rMax; if(blue > 255) blue = 255; if(blue < 0) blue = 0; g.setColor(new Color(0, 0, blue)); g.fillOval(x, y, r, r); } while(true) { // Hämtar först till en tmp-vektor för att slippa blinkandet Vector ballsRawTmp = null; try { ballsRawTmp = remoteServer.getBalls(); } catch(RemoteException re) { System.out.println("Exception generated: " + re.getMessage()); } // Sudda de tidigare bollarna g.setColor(getBackground()); for(int i = 0; i < ballsRaw.size(); i = i + 3) { int x = (Integer)ballsRaw.elementAt(i); int y = (Integer)ballsRaw.elementAt(i + 1); int r = (Integer)ballsRaw.elementAt(i + 2); g.fillOval(x, y, r, r); } // Rita de nya bollarna ballsRaw = ballsRawTmp; for(int i = 0; i < ballsRaw.size(); i = i + 3) { int x = (Integer)ballsRaw.elementAt(i); int y = (Integer)ballsRaw.elementAt(i + 1); int r = (Integer)ballsRaw.elementAt(i + 2); int blue = r * 255 / rMax; if(blue > 255) blue = 255; if(blue < 0) blue = 0; g.setColor(new Color(0, 0, blue)); g.fillOval(x, y, r, r); } setTitle("Antal bollar: " + ballsRaw.size() / 3); try { Thread.sleep(50); }catch(Exception e){ } } } class KeyListener extends KeyAdapter{ public void keyPressed(KeyEvent e){ if (e.getKeyCode() == e.VK_O){ try{ remoteServer.addBall(); }catch(RemoteException re){} }else if (e.getKeyCode() == e.VK_P){ try{ remoteServer.pauseBalls(); }catch(RemoteException re){} } } } public static void main(String[] args){ Client cl = new Client(args[0]); new Thread(cl).start(); } }