【问题标题】:Where will i put "Public static void main(String[] args)"?我将把“Public static void main(String[] args)”放在哪里?
【发布时间】:2015-01-06 16:05:21
【问题描述】:

我几天前开始编写 java 代码。我做了一些成功的程序,但我坚持这个。 我在哪里编写“Public static void main(String[] args)”代码时出现错误。大多数时候它告诉我“;”是期待。我知道把“;”前面那个代码是错误的。有人能告诉我具体在哪里写吗?或者如果可能的话为我修复代码?代码如下:

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

public class Panel_Test extends JFrame{

public static void main(String[] args){
    public Board(){

        super("Java Panel");

        setSize(300,300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

        JPanel a = new JPanel();
        JPanel a2 = new JPanel();
        JButton b = new JButton("Button 1");
        JButton c = new JButton("Button 2");
        JCheckBox cb = new JCheckBox("CB1");
        JCheckBox cb2 = new JCheckBox("CB2");
        a.add(b);
        a.add(c);
        a2.add(cb);
        a2.add(cb2);
        add(a, BorderLayout.SOUTH);
        add(a2, BorderLayout.NORTH);
        }
    }
}

【问题讨论】:

  • 在构造函数之外。请阅读basic tutorial
  • 好像您正在创建一个 Swing java 应用程序。在这种应用程序中,您不需要添加“public static void main(String []args)”,因为 Swing 会为您处理。您只需添加控件和代码事件处理程序。
  • @RobertoLinares 你确实需要一个main,它是入口点,即使对于 Swing 应用程序也是如此。
  • @MarounMaroun 是的,您需要它,但大多数 IDE 在您创建 Swing java 应用程序时会为您处理它,因此您无需手动添加它。我就是这个意思。
  • 不是最难的问题,但应该允许新手 - 我不喜欢快速投票:-D

标签: java


【解决方案1】:

你的问题在于这 3 行:

public class Panel_Test extends JFrame{

public static void main(String[] args){
    public Board(){

main 方法中也不应该有构造函数,这需要独立于方法之外。我还建议有一个带有Board 构造函数的Board 类和一个带有main 方法的Panel_Test 类。试试这个:

public class Panel_Test {

    public static void main(String[] args){
        new Board().doSwing();
    }
}

public class Board extends JFrame {

    public Board() {
    }    

    public void doSwing() {
    //Your Swing code here...
    }
}

【讨论】:

    【解决方案2】:

    让您的构造函数与main 方法分开,并使其名称与您的类名相同(即public Panel_Test,因为您的类名是Panel_Test)。

    public class Panel_Test extends JFrame {
        public Panel_Test() {
            // code here
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new Panel_Test();
                }
            });
        }
    }
    

    不要忘记使用 javax.swing.SwingUtilities 在事件调度线程上执行 Swing 操作。

    【讨论】:

    • 感谢您的回答
    【解决方案3】:

    您的语法没有任何意义。您的 main() 方法中似乎有一个名为 Board() 的方法,这是不可能的。

    这进一步没有意义,因为 Board() 是一个构造函数(注意它以大写字母开头并且没有返回类型),但我在这里看不到 Board 类。

    你需要弄清楚你想要做什么:你应该创建一个 Board 类吗?如果是这样,那属于另一个文件。您是否已经有一个要从 main() 方法构建的 Board 类?如果是这样,那么您使用 new 关键字调用构造函数。

    推荐阅读:The Java Tutorials: Providing Constructors for Your Classes

    【讨论】:

    • @JohnKugelman 我建议 OP 阅读有关构造函数的教程,然后退后一步弄清楚他们到底想要做什么。不过感谢您的反馈。
    【解决方案4】:

    您的Board() 实际上是一个构造函数,不能在方法内部创建。每个类都有一个构造函数。如果没有编码,则会为您提供一个默认的无参数构造函数。您面临的主要问题是您在名为 Panel_Test 的类中创建了一个名为 Board 的构造函数。

    给你一个基本的例子来说明它是如何工作的:

    public class Board extends JFrame {
    
        //your fields
    
        public Board() {//your constructor
    
        }
    
        //your methods
    
    }
    
    public class Test_Panel {
    
        public static void main(String[] args) {
    
            Board board = new Board();//calling your Test_Panel class' constructor 
    
        }
    
    }
    

    如果您是编程新手,并且希望更加扎实地掌握基础知识,here's 是我在作为程序员学习 Java 时偶尔使用的一个不错的网站。

    【讨论】:

    • 感谢您的回答。我是 Java 编码的新手。
    猜你喜欢
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 2018-11-12
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2019-11-23
    相关资源
    最近更新 更多