我刚开始学习秋千。想到尝试一个简单的程序,但我无法运行它。
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进行编译和运行。
答案 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如何知道应该调用哪个方法来启动它们。他们可以猜测,但大多数时候,猜测可能会出错。所以,提供一个简单的主要方法将有所帮助