package jp.gr.javacons.industry.seminar.tempmonitor; import jp.gr.javacons.industry.seminar.barmeter.*; import java.awt.*; import java.awt.event.*; import java.util.Vector; public class TemperatureMonitor implements Runnable { protected DataCollector collector; protected Vector meters; protected Thread dataCollectionThread; public static final long INTERVAL = 1000L; public TemperatureMonitor(){ // データコレクターの生成 collector = new DarwinDataCollector(); collector.open(); // フレームの生成 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(); collector.close(); System.exit(0); } }); // バーメータの生成 meters = new Vector(); for(int i = 0 ; i < collector.getChannelSize() ; i++){ BarMeter barmeter = new BarMeter(); barmeter.setForeground(Color.yellow); barmeter.setBackground(Color.black); barmeter.setMinimum(0); barmeter.setMaximum(100); 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; BarMeter barmeter; Thread currentThread = Thread.currentThread(); while(currentThread == dataCollectionThread){ // データの収集 data = collector.getData(); // データの表示 for(int i = 0 ; i < collector.getChannelSize() ; 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 TemperatureMonitor()).start(); } }