类没有主方法(红绿灯)

时间:2016-04-18 11:31:43

标签: java java-2d

我从this链接找到了一个java代码。

当我尝试运行它时,错误类没有主要方法。我知道这是一个类似的帖子,但我尝试搜索/尝试不同的解决方案,但当我尝试它们时,他们不工作。以下是代码

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.
        }
    }

3 个答案:

答案 0 :(得分:1)

您的问题有答案,您在代码/类中没有主要方法,而您正尝试执行该方法。

正如您在评论中提到的,您不熟悉使用Eclipse,Netbeans或IntelliJ IDEA等IDE,它们会为您提供正确的警告和提示。

答案 1 :(得分:0)

我认为您找到的代码源于此:

如果查看链接文件,开头会有一个块注释:

/**
 * 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.
 */

编写一个执行该操作的Applet,您可以运行代码。

答案 2 :(得分:0)

您发布的课程<input v-model="id"> <!-- Filter to the id inputted here --> TrafficLight.java的一部分。所以它不能单独运行。

Applet本身通常嵌入到网页中并在浏览器中运行。在Oracles Applet tutorial上查看有关小程序的更多信息。

要在applet中运行,您可以从here

下载以下文件

您可以将applet运行为:

Applet

要在没有appletviewer的情况下从命令行运行applet代码,你需要一个可以执行applet的图形容器。

示例代码段看起来像

appletviewer TLApplet.html

要运行它,您必须执行(假设文件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(); } } 与下载的文件位于同一目录中)

TLAppletFrame.java