import java.awt.*; public class Graph1 extends java.applet.Applet implements Runnable { int step = 0; Thread mainThread; boolean pause = false; public void init() { // Create a thread for the action to happen in mainThread = new Thread(this); mainThread.start(); } public void paint(Graphics g) { // Clear the image clearImage(g); // Set the drawing color for the curve g.setColor(Color.red); int x; // Use this to remember the last position so we // can draw a line back to it. We have to give it // an initial value or the compiler will complain. int oldy = 0; // Trig refresher course! for (x = 0; (x < 360); x += 4) { double degrees = x + step; // Convert degrees to radians double radians = degrees * .0174532925; int y = (int) (Math.sin(radians) * 90) + 90; // Draw a red line from this value to the previous one, // if any if (x > 0) { g.drawLine(x - 4, oldy, x, y); } // Remember this position for the next line oldy = y; } } public void run() { while (true) { if (pause) { // Sleep a lot when paused try { mainThread.sleep(100); } catch (Exception e) { // Nothing will be interrupting us, // so just catch and do nothing here } } else { // Move and repaint moveOneStep(); repaint(); } } } void moveOneStep() { step++; if (step == 360) { step = 0; } try { mainThread.sleep(50); } catch (Exception e) { // Nothing will be interrupting us, // so just catch and do nothing here } } void clearImage(Graphics g) { // Clear the image g.setColor(Color.black); g.fillRect(0, 0, 360, 180); } public void start() { // This is called by the browser // when the user returns to this // web page, and also once right // after init(). Clear the // pause flag. pause = false; } public void stop() { // This is called by the browser // when the user leaves this // web page. Set the pause flag // to avoid wasting CPU. pause = true; } public void destroy() { // This is called by the browser // when the web page is being // thrown out of cache and the // applet is discarded. It is our // task to stop our thread. mainThread.stop(); } };