运行简单的挥杆程序时出错

时间:2010-08-06 06:11:27

标签: java swing performance

我刚开始学习秋千。想到尝试一个简单的程序,但我无法运行它。

import java.awt.*;
import javax.swing.*;
class MyDrawPanel extends JPanel 
{
    public void paintComponent(Graphics g) 
    {
        g.setColor(Color.orange);
        g.fillRect(20,50,100,100);
    }
}

我收到以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: main

我的问题:我们是否需要在每个要运行的课程中使用主要方法? JVM不能运行任何没有main方法的类。在这里我不需要主类我认为,因为这个paintComponent方法应该由系统调用,对吗?

P.S:我使用普通的vanilla cmd进行编译和运行。

4 个答案:

答案 0 :(得分:1)

正如vodkhang所说,你需要一种“主要”的方法。确保它看起来像这样:

public static void main(String[] args)
{
  // your code here.  
  // this example will use your panel:

  // create a new MyDrawPanel 
  MyDrawPanel panel = new MyDrawPanel();

  // create a frame to put it in
  JFrame f = new JFrame("Test Frame");
  f.getContentPane().add(panel);

  // make sure closing the frame ends this application
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  // show the frame
  f.setSize(100,100);
  f.setVisible(true);

}

是的,您要运行的每个Java程序都需要一个具有此签名的主方法:

  public static void main(String[] args)

您可以从其他系统(如Web服务器等)运行java代码而不使用“main”,但只需运行它,主要是入口点。把它放在你想要开始运行程序的地方。

运行时,请确保正确使用类名以帮助其找到主要方法。在您的情况下,如果您在MyDrawPanel.class文件所在的目录中手动运行java,则可以执行以下操作:

  java -cp . MyDrawPanel

如果您从开发人员工具中运行,那么它将提供运行您正在查看的类的方法。

答案 1 :(得分:1)

  

我们需要一个主要方法吗?   我们想要经营的每个班级?

您需要一个带有main方法的类来启动JVM。

  

JVM不能运行任何没有main方法的类。

最初不是。

  

这里我认为不需要主类,因为这个paintComponent方法应该被系统调用,对吗?

错误。确实,paintComponent()方法最终将被“系统”调用,特别是Swing Event Dispatch Thread。但这需要首先启动,这在您创建窗口并使其可见时会隐式发生。而这反过来只能在主要方法中发生。

答案 2 :(得分:1)

java非常简单,当你给它一个类文件时,它会加载它并尝试执行一个程序。 Java程序被定义为从“public static void main(String ... args)”方法开始。因此,缺少此函数的类文件没有程序的有效入口点。

要使java调用paintComponent()方法,您必须将类的实例添加到顶级容器(如JFrame)或Web应用程序(JApplet)。 (小程序不使用main方法,因为它们作为网页的一部分而不是独立的应用程序执行。)

示例:

import javax.swing.*
public class MyDrawPanel{
     public static void main(String... args)
     {
         JFrame frame = new JFrame(200,200);//A window with 200x200 pixel
         MyDrawPanel mdp = new MyDrawPanel();//Panel instance
         frame.add(mdp);//Add the panel to the window
         frame.setVisible(true);//Display all
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//exit when the window is closed

     }
}

答案 3 :(得分:0)

您需要在类中使用main方法来运行程序。这是强制性的。如果您有多个方法,JVM如何知道应该调用哪个方法来启动它们。他们可以猜测,但大多数时候,猜测可能会出错。所以,提供一个简单的主要方法将有所帮助