package jp.gr.javacons.industry.seminar.sockettempmonitor; import jp.gr.javacons.industry.seminar.barmeter.*; import java.awt.*; import java.awt.event.*; import java.util.Vector; public class SocketTemperatureMonitorClient implements Runnable { protected SocketDataCollector collector; protected Vector meters; protected Thread dataCollectionThread; public static final long INTERVAL = 1000L; public SocketTemperatureMonitorClient(){ collector = new DataCollectorProxy("localhost"); // フレームの生成 Frame frame = new Frame("TemperatureMonitor"); frame.setBounds(100, 100, 300, 150); frame.setLayout(new GridLayout(0,4)); frame.setBackground(Color.lightGray); frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent event){ stop(); System.exit(0); } }); // バーメータの生成 meters = new Vector(); int channel = 0; try{ channel = collector.getChannelSize(); }catch(Exception ex){ ex.printStackTrace(); } for(int i = 0 ; i < channel ; i++){ BarMeter barmeter = new BarMeter(); barmeter.setForeground(Color.yellow); barmeter.setBackground(Color.black); barmeter.setMinimum(0); barmeter.setMaximum(100); // barmeter.setPreferredSize(new Dimension(80, 160)); Panel panel = new Panel(); panel.add(barmeter); frame.add(panel); meters.add(barmeter); } frame.setVisible(true); } public void start(){ dataCollectionThread = new Thread(this); dataCollectionThread.start(); } public void stop(){ dataCollectionThread = null; } public void run(){ Vector data = null; BarMeter barmeter; int channel = 0; try{ channel = collector.getChannelSize(); }catch(Exception ex){ ex.printStackTrace(); System.exit(1); } Thread currentThread = Thread.currentThread(); while(currentThread == dataCollectionThread){ // データの収集 try{ data = collector.getData(); }catch(Exception ex){ ex.printStackTrace(); } // データの表示 for(int i = 0 ; i < channel ; i++){ barmeter = (BarMeter)meters.elementAt(i); barmeter.setValue(((Double)data.elementAt(i)).doubleValue()); } try{ currentThread.sleep(INTERVAL); }catch(InterruptedException ex){} } } public static void main(String[] args){ (new SocketTemperatureMonitorClient()).start(); } }