-7

I found a java code from this link.

and when I tried to run it the error class doesnt have a main method.I know this is a similiar post but I tried searching/trying for different solution but when I tried them they dont work. Below is the code

package trafficlight;


import javax.swing.*;
import java.awt.*;

public final class TrafficLight extends JPanel implements Runnable{

  int redDuration,  // Time (in seconds) for duration of red light
      yellowDuration,   // Time (in seconds) for duration of yellow light
      greenDuration;    // Time (in seconds) for duration of green light
  PedestrianLight PL;   // Associated coordinated pedestrian light
  Color onLight;    // To indicate which color light is on

  int TLWidth = 0;  // Width of traffic light
  int TLHeight;     // Height of traffic light
  int xOrigin;      // Coordinates of upper left-hand corner of
  int yOrigin;          // traffic light
  int xLCoor;       // x coordinate of lights
  int yLCoor;       // y coor of red light
  int LDiam;        // Diameter of each light
  int interLSpace;  // Space between lights

  /*************************************
   * Constructors
   *************************************/

  TrafficLight( PedestrianLight PL )    // One-parameter constructor
  {
      this.PL = PL;
      onLight = Color.green;
      redDuration = 15000;      // Set red duration to 15 secs
      yellowDuration = 5000;        // Set yellow duration to 5 seconds
      greenDuration = 15000;        // Set green duration to 15 secs
  }



  TrafficLight( PedestrianLight PL,Color c ) // Two-parameter constructor
  {
      this.PL = PL;
      setOnLight( c );    // Verify color setting
      redDuration = 15000;      // Set red duration to 15 secs
      yellowDuration = 5000;        // Set yellow duration to 5 seconds
      greenDuration = 15000;        // Set green duration to 15 secs
  }

  
  TrafficLight( PedestrianLight PL,int redDur,int yellowDur,int greenDur ){
      this.PL = PL;
      onLight = Color.green;
      redDuration = 1000*redDur;    // Duration params given in secs
      yellowDuration = 1000*yellowDur;  // Convert to milliseconds
      greenDuration = 1000*greenDur;
  }

  /**************************************
   * Setters and getters
     * @return 
   **************************************/

  public Color getOnLight()
  {
      return onLight;
  }

  public void setOnLight( Color c )
  {
      // Setters and constructors should insure that class variables
      // are set to valid values.
      if ( c == Color.red || c == Color.yellow || c == Color.green )
          {
              onLight = c;
          }
      else
          {
              System.out.println("TrafficLight.setOnLight:  cannot set " +
                                 "traffic light to color " + c +
                                 "\nSetting color to default green.");
              onLight = Color.green;
          }
  }

  public void setColor( Color c ){
      setOnLight( c );
      repaint();
  }

  /************************************************
   * Paint
   ************************************************/

  @Override
  public void paintComponent(Graphics g)
  {
   super.paintComponent( g );       // For background
   System.out.println("Painting traffic light again");
   if ( TLWidth == 0 ){
       Dimension d = getSize();     // Get size of panel
       System.out.println("d = " + d);
       TLWidth = d.width/2;     // Set width of traffic light
       TLHeight = 3*d.height/4;     // Set height of traffic light
       xOrigin = (d.width - TLWidth)/2; // Center traffic light on panel
       yOrigin = (d.height - TLHeight)/2;
       LDiam = TLHeight/6;          // Diameter of each light
       xLCoor = xOrigin + (TLWidth - LDiam)/2;  // x coordinate of lights
       interLSpace = (TLHeight - 3*LDiam)/4;    // Space between lights
       yLCoor = yOrigin + interLSpace;      // y coor of red light
   }

   Color colorSave = g.getColor();  // Save current color

   //Draw outline of traffic light
   g.setColor( Color.lightGray );
   g.fill3DRect(xOrigin,yOrigin,TLWidth,TLHeight,true);

   Color Red, Yellow, Green;        // Colors to change light to
   // Change the light
   if ( onLight == Color.red ){
       Red = turnOn( Color.red );
       Yellow = turnOff( Color.yellow );
       Green = turnOff( Color.green );
   }
   else if ( onLight == Color.yellow ){
       Red = turnOff( Color.red );
       Yellow = turnOn( Color.yellow );
       Green = turnOff( Color.green );
   }
   else{
       Red = turnOff( Color.red );
       Yellow = turnOff( Color.yellow );
       Green = turnOn( Color.green );
   }

   // Now color the lights.  onLight is bright others are darkened.

   g.setColor( Red );
   g.fillOval(xLCoor,yLCoor,LDiam,LDiam);

   g.setColor( Yellow );
   g.fillOval(xLCoor,yLCoor+LDiam+interLSpace,LDiam,LDiam);

   g.setColor( Green );
   g.fillOval(xLCoor,yLCoor+2*LDiam+2*interLSpace,LDiam,LDiam);

   // Now draw black outline around each light
   g.setColor(Color.black);
   // Red light
   g.drawOval(xLCoor,yLCoor,LDiam,LDiam);
   // Yellow light
   g.drawOval(xLCoor,yLCoor+LDiam+interLSpace,LDiam,LDiam);
   // Green light
   g.drawOval(xLCoor,yLCoor+2*LDiam+2*interLSpace,LDiam,LDiam);

   g.setColor(colorSave);       // Restore original color
  }

 /************************************************
  * Auxillary methods used by paintComponent
  ************************************************/

  Color turnOn( Color c )
  { return c.brighter().brighter(); }
 
  Color turnOff( Color c )
  { return c.darker().darker(); }

 /************************************************
  * run method as required by Runnable interface
  ************************************************/

  @Override
  public void run(){
      System.out.println("Entering TrafficLight.run()");
      long startTime;
      PL.setMessage( "Don't Walk" );
      while ( true )
      {
         setColor( Color.red );      // Change traffic light to red
         try{ 
             System.out.println( "TL.run() sleep for " + redDuration +
                                 "milliseconds." );
             Thread.sleep( redDuration ); 
         }
         catch ( InterruptedException e ) {}
 
         startTime = System.currentTimeMillis();
         setColor( Color.green );       // Change traffic light to green
         PL.setMessage( "Walk" );       // Change ped light to "Walk"
         try{               // Sleep for 2/3 green dur minus time
             startTime += 2*greenDuration/3; // to change lights
             Thread.sleep( Math.max( 0,startTime-System.currentTimeMillis() ) );
         }
         catch ( InterruptedException e ) {}

         //PL.setMessage( "Don't Walk" ); // change ped light to "Don't Walk"
         //PL.setFlashing( true );        // & start ped light flashing.
         startTime = System.currentTimeMillis(); 
         PL.setMessage( "Don't Walk",true ); //Atomize above two calls
         try{ 
             startTime += greenDuration/3; // Sleep 1/3 green duration
             Thread.sleep( Math.max( 0,startTime-System.currentTimeMillis() ) );
         }
         catch ( InterruptedException e ) {}
 
         startTime = System.currentTimeMillis();
         PL.setFlashing( false );    // Chg ped light from flash to solid
         setColor( Color.yellow );   // Change traffic light to yellow
         try{ 
             startTime += yellowDuration;
             Thread.sleep( Math.max( 0,startTime-System.currentTimeMillis() ) );
         }
         catch ( InterruptedException e ) {}
      }
  }

    private static class PedestrianLight {

        public PedestrianLight() {
        }

        private void setFlashing(boolean b) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        private void setMessage(String dont_Walk, boolean b) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        private void setMessage(String walk) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    }
 
Glorfindel
  • 21,988
  • 13
  • 81
  • 109
Vista
  • 201
  • 2
  • 4
  • 23
  • 1
    Look at your code,there is no main method.hence the error – SpringLearner Apr 18 '16 at 11:36
  • can you show an example? sorry I'm just getting started to code java – Vista Apr 18 '16 at 11:38
  • Didn’t you find any instructions where you found the class? The class you show us is a JPanel (an extension of JPanel, but you can use it as a JPanel). Wrap it inside a JFrame and write a main method somewhere that creates an instance of you JFrame. Find more details in your text book in building graphical user interfaces with Java and Swing. You should probably also run a Thread with your traffic light as its Runnable. – Ole V.V. Apr 18 '16 at 11:39
  • There's no example to give. The class you posted doesn't have a main method, so you can't execute it. You should write a new class with a main method that creates a TrafficLight and exercises it. – duffymo Apr 18 '16 at 11:39
  • @Vista https://docs.oracle.com/javase/tutorial/getStarted/application/ – SpringLearner Apr 18 '16 at 11:40

3 Answers3

1

Your question have the answer, you don't have a main method in your code/class which you are trying to execute.

As you mentioned in your comment you are new to java use IDEs like Eclipse, Netbeans or IntelliJ IDEA where they gives you proper warnings and hints.

Sanjit Kumar Mishra
  • 1,153
  • 13
  • 32
0

I think the code you found is derived from this:

If you look at the linked file, there is a block comment at the start that says this:

/**
 * The <code>class TrafficLight</code> defines a panel on which the
 * <code>paintComponent( Graphics )</code> method draws a traffic light.
 * This code uses JDK 1.2.
 * This version of the class also implements Runnable with a run method
 * that animates the traffic light and sends signals to a coordinated
 * pedestrian light (whose name must be provided to the Traffic light 
 * constructor) to change and flash the pedestrian light at the appropriate
 * times.  This is done by synchronized getters and setters in the
 * associated pedestrian light class.
 *
 * To use (or install) such a light, it is only necessary in the applet
 * to declare the associated pedestrian light, declare the traffic light
 * and pass it the name of the associated pedestrian light and the desired
 * time durations for each of the red (default 15 secs), yellow 
 * (default 5 secs), and green (default 15 secs) lights.  The pedestrian
 * light will be a solid "Don't Walk" during the red and yellow lights.
 * On the green light, the pedestrian light will display a solid "Walk"
 * for the first 2/3 of the green duration and the last 1/3 of the
 * green duration, the "Walk" will flash.  All of the animation is 
 * provided by the run methods in the traffic light and pedestrian light
 * classes.
 */

Code up an Applet that does that, and you can run the code.

Stephen C
  • 698,415
  • 94
  • 811
  • 1,216
0

Your posted class TrafficLight.java is part of an Applet. So it cannot be run on it's own.

Applets itself normally are embedded into a webpage and run inside a browser. See more about applets on Oracles Applet tutorial.

To run it within an applet you could download the following files from here

The you can run the applet as:

appletviewer TLApplet.html

To run the applet code from commandline without the appletviewer you need some graphic container where the applet can be executed.

An example snippet looks like

import javax.swing.JFrame;
import javax.swing.JApplet;

class TLAppletFrame {

    public static void main(String[] args) {
        JApplet applet = new TLApplet();
        applet.init();

        JFrame frame = new JFrame("Applet in Frame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( applet );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );

        applet.start();
    }   
}

To run it you have to execute (assumed the file TLAppletFrame.javais in the same directory as the downloaded files)

javac TLAppletFrame.java
java TLAppletFrame
Glorfindel
  • 21,988
  • 13
  • 81
  • 109
SubOptimal
  • 22,518
  • 3
  • 53
  • 69