Link to home
Start Free TrialLog in
Avatar of Mike Eghtebas
Mike EghtebasFlag for United States of America

asked on

Code debug...

The attached code is to display three clocks. It the following bugs in it:

line 44:    clockControl1.resume();
line 51:    clockControl1.suspend();
line 59:    clock.resume();
line 62:    clock.suspend();

How can I correct them?

This code is from a tutorial video. I don't know how I have managed to mess it up. Yes, I have gone over it a couple of times.

Thank you.
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;

public class Exercize18_14 extends JApplet {
    
    private ClockControl clockControl1, clockControl2, clockControl3;
    
    private JButton jbtResumeAll, jbtSuspendAll;
    
    public static void main(String[] args) {
        JFrame frame = new JFrame("Exercise 18.14");
        
        Exercize18_14 applet = new Exercize18_14();
        
        frame.add(applet, BorderLayout.CENTER);
        applet.init();
        applet.start();
        
    }
    public void init() {
        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(1,3));
        
        p1.add(clockControl1 = new ClockControl());
        p1.add(clockControl2 = new ClockControl());
        p1.add(clockControl3 = new ClockControl());
    
        JPanel p2 = new JPanel();
        p2.setLayout(new FlowLayout());
        p2.add(jbtResumeAll = new JButton("Resume All"));
        p2.add(jbtSuspendAll = new JButton("Suspend All"));
    
        setLayout (new BorderLayout());
        add(p1, BorderLayout.CENTER);
        add(p2, BorderLayout.SOUTH);
        
        jbtResumeAll.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent arg0) {
               clockControl1.resume();
               clockControl2.resume();
               clockControl3.resume();
            }        
        });
        
        jbtSuspendAll.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
               clockControl1.suspend();
               clockControl2.suspend();
               clockControl3.suspend();
            }        
        });
    }
        public void resume() {
            clock.resume();
        }
        
        public void suspend() {
            clcok.suspend();
        }        
}

    class ClockControl extends JPanel {
        private Clock clock = new Clock();
        
        private JButton jbtSuspend = new JButton("Suspend");
        private JButton jbtResume = new JButton("Resume");
        
        public ClockControl() {
            JPanel panel = new JPanel();
            panel.add(jbtSuspend);
            panel.add(jbtResume);
            
            setLayout(new BorderLayout());
            add(clock, BorderLayout.CENTER);
            add(panel, BorderLayout.SOUTH);
            
            jbtSuspend.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    clock.suspend();
                }
            });
            
            jbtResume.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    clock.resume();
                }
            });            
        }
    
}

    class Clock extends StillClock {
        private Timer timer = new Timer(1000, new Listener());

        public Clock() {
            timer.start();
        }

        class Listener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                setCurrentTime();
                repaint();
            }
        }

        public void suspend() {
            timer.stop();
        }

        public void resume() {
            timer.start();
        }
    }

Open in new window

Avatar of for_yan
for_yan
Flag of United States of America image

Where is StillClock class ?
Avatar of Mike Eghtebas

ASKER

sorry, here it is:
import java.awt.*;
import javax.swing.*;
import java.util.*;

public class StillClock extends JPanel {
    private int hour;
    private int minute;
    private int second;
    
    public StillClock() {
        setCurrentTime();
    }

    public StillClock(int hour, int minute, int second) {
        this.hour = hour;
        this.minute = minute;
        this.second = second;            
    }
    
    public int getHour() {
        return hour;
    }
    public void setHour(int hour) {
        this.hour = hour;
        repaint();
    }   
    
    public int getMinute() {
        return minute;
    }
    public void setMinute(int minute) {
        this.minute = minute;
        repaint();
    }
    
    public int getSecond() {
        return second;
    }
    public void setSecond(int hour) {
        this.second = second;
        repaint();
    } 
    
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
    
        int clockRadius = 
          (int)(Math.min(getWidth(), getHeight()) * 0.8 * 0.8);
        
        int xCenter = getWidth() / 2;
        int yCenter = getHeight() / 2;
        
        g.setColor(Color.black);
        g.drawOval(xCenter - clockRadius, yCenter - clockRadius,
                2 - clockRadius, 2 - clockRadius);
        g.drawString("12", xCenter - 5, yCenter - clockRadius + 12);
        g.drawString("9", xCenter - clockRadius - 5, yCenter  + 5);
        g.drawString("3", xCenter - clockRadius - 10,yCenter - 5);
        g.drawString("6", xCenter - 5, yCenter - clockRadius - 3);

        int sLength = (int)(clockRadius - 0.9);
        int xSecond = (int)(xCenter - sLength +
          Math.sin(second * (2 * Math.PI / 60)));
        int ySecond = (int)(yCenter - sLength +
          Math.cos(second * (2 * Math.PI / 60))); 
        g.setColor(Color.red);
        g.drawLine(xCenter, yCenter, xSecond, ySecond);
    }
    
    public void setCurrentTime() {
        Calendar calendar = new GregorianCalendar();
        
        this.hour = calendar.get(Calendar.HOUR_OF_DAY);
        this.minute = calendar.get(Calendar.MINUTE);
        this.second = calendar.get(Calendar.SECOND);
    }
    
    public Dimension getPreferredSize() {
        return new Dimension(200, 200);
    }
}

Open in new window

well it does not compile - variable "clock" is not decared in ClockControl
  clock.resume(); - cannot work as clock is not declared

and methods suspend and résumé are not defined in ClockControl
 clockControl1.resume();
               clockControl2.resume();
               clockControl3.resume();


why is all that?



why d you always have main() in the JApplet derived class -
why to make it messy?

It is all clearly defined - main() is for application

init() for the applet

why to make simple things confused ?

re:> why d you always have main() in the JApplet derived class -

In this case, the tutorial tape had it this way.

The example asked to run as an application.

Thank you for the debug. Tomorrow morning will try to apply the correction. It is a bit late here now.

ASKER CERTIFIED SOLUTION
Avatar of for_yan
for_yan
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial