Java 类没有主方法(红绿灯)

Java 类没有主方法(红绿灯),java,java-2d,Java,Java 2d,我从link中找到了一个java代码 我知道这是一篇类似的帖子,但我尝试过搜索/尝试不同的解决方案,但当我尝试它们时,它们不起作用。下面是代码 package trafficlight; import javax.swing.*; import java.awt.*; public final class TrafficLight extends JPanel implements Runnable{ int redDuration, // Time (in seconds) fo

我从link中找到了一个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.
        }
    }

您的问题有答案,您的代码/类中没有您试图执行的main方法


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

我认为您找到的代码源自:

如果查看链接文件,则开头有一条块注释,说明:

/**
 * 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.
 */
编写一个执行该操作的小程序,然后您可以运行该代码。

您发布的类TrafficLight.java是小程序的一部分。所以它不能单独运行

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

要在小程序中运行它,您可以从

您可以通过以下方式运行小程序:

appletviewer TLApplet.html
要在不使用appletviewer的情况下从命令行运行小程序代码,您需要一些可以执行小程序的图形容器

示例代码段如下所示

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与下载的文件位于同一目录下执行

javac TLAppletFrame.java
java TLAppletFrame

看看你的代码,没有main方法。因此错误你能举个例子吗?抱歉,我刚刚开始编写Java代码。你在找到类的地方没有找到任何说明吗?您向我们展示的类是一个JPanel,它是JPanel的扩展,但是您可以将其用作JPanel。将它包装在JFrame中,并在某个地方编写一个main方法来创建JFrame的实例。在使用Java和Swing构建图形用户界面的教科书中找到更多详细信息。您可能还应该运行一个线程,将红绿灯作为其可运行状态。这里没有示例。您发布的类没有main方法,因此无法执行它。您应该使用一个main方法编写一个新类,该方法创建TrafficLight并对其进行练习。@Vista