import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.rmi.*; public class Client extends JFrame implements Runnable { RemoteServer remoteServer = null; Thread thread = new Thread(this); int xLim = 500, yLim = 500, rMax = 70; Vector ballsRaw = new Vector(); public static void main(String[] args) { System.setSecurityManager(new RMISecurityManager()); new Client(args[0]); } public Client(String host) { String url = "rmi://" + host + "/"; try { remoteServer = (RemoteServer)Naming.lookup(url + "server"); } catch(Exception e) { System.out.println("Exception generated: "+ e.getMessage()); } setSize(xLim, yLim); setVisible(true); addKeyListener(new L()); thread.start(); } public void run() { 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()); } Graphics g = getGraphics(); 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); } 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 L extends KeyAdapter { public void keyPressed(KeyEvent e) { try { if(e.getKeyChar() == '+') remoteServer.addBall(); if(e.getKeyChar() == 'p') remoteServer.pauseBalls(); } catch(RemoteException re) { System.out.println("Exception generated: " + re.getMessage()); } } } }