import java.awt.Color; import java.awt.Image; import java.awt.Toolkit; import java.awt.Graphics; import java.awt.Component; import java.awt.Dimension; import java.awt.image.ImageProducer; import java.awt.image.ImageConsumer; import java.awt.image.DirectColorModel; public abstract class ProCon extends java.applet.Applet implements Runnable, ImageProducer { Graphics graphics; int _width; int _height; Image _image; Thread _thread; ImageConsumer _consumer; DirectColorModel _model; public abstract void Main(int width,int height); public synchronized void update(Object pixels) { if(_consumer!=null) { _consumer.setPixels(0,0,_width,_height,_model,(int[])pixels,0,_width); _consumer.imageComplete(ImageConsumer.SINGLEFRAMEDONE); } paint(); } public void start() { if(_thread==null) { _thread = new Thread(this); _thread.start(); } } public void run() { Dimension size = size(); _width = size.width; _height = size.height; _model = new DirectColorModel(32,0x00FF0000,0x000FF00,0x000000FF,0); _image = Toolkit.getDefaultToolkit().createImage(this); Main(_width,_height); } public void stop() { if(_thread!=null && _thread.isAlive()) { _thread.stop(); } _thread = null; } private synchronized void paint() { graphics = getGraphics(); graphics.drawImage(_image,0,0,_width,_height,null); } public synchronized void addConsumer(ImageConsumer ic) { _consumer = ic; _consumer.setDimensions(_width,_height); _consumer.setHints(ImageConsumer.TOPDOWNLEFTRIGHT|ImageConsumer.COMPLETESCANLINES|ImageConsumer.SINGLEPASS|ImageConsumer.SINGLEFRAME); _consumer.setColorModel(_model); } public synchronized boolean isConsumer(ImageConsumer ic) { return true; } public synchronized void removeConsumer(ImageConsumer ic) { return; } public void startProduction(ImageConsumer ic) { addConsumer(ic); } public void requestTopDownLeftRightResend(ImageConsumer ic) { return; } }