Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Main method not found" error when starting program? [duplicate]

Tags:

java

I'm learning Java for my course and I've hit a brick wall. I've been tasked with developing a simple command line program. To make things easier I was given the following sample code to modify so I wouldn't have to start from scratch.

package assignment;

public class Main {
private final static String[] mainMenuOpts = {"Students","Lecturers","Admin","Exit"};
private final static String[] studentMenuOpts = {"Add Student","List all Students","Find a Student","Return to Main Menu"};
private Menu mainMenu = new Menu("MAIN MENU",mainMenuOpts);
private Menu studentMenu = new Menu("STUDENT MENU",studentMenuOpts);
private DataStore data = new DataStore();
private java.io.PrintStream out = System.out;
private ReadKb reader = new ReadKb();
/** Creates a new instance of Main */
public Main() {
    run();
}

private void run(){
    int ret = mainMenu.display();
    while(true){
        switch(ret){
            case 1: students();break;
            case 2: lecturers(); break;
            case 3: admin(); break;
            case 4: exit(); break;
        }
        ret = mainMenu.display();
    }
}
private void students(){
    int ret = studentMenu.display();
    while(ret != 4){
        switch(ret){
            case 1: addStudent();break;
            case 2: listStudents(); break;
            case 3: findStudent(); break;
        }
        ret = studentMenu.display();
    }
}
private void lecturers(){
    out.println("\nLecturers not yet implemented");
}
private void admin(){
    out.println("\nAdmin not yet implemented");
}
//Student methods
private void addStudent(){
    out.println("\n\tAdd New Student");
    //prompt for details
    //add student to the datastore
    //ask if they want to enter another student - 
    // if so call addStudent again
    //otherwise the method completes and the studentMenu will display again

}
private void listStudents(){
    out.println("\n\tStudent Listing");
    //list all students from the datastore
}
private void findStudent(){
    out.println("\n\tFind Student");
    out.print("Enter Search String: ");
    //reasd search text
    //use datastore method to get list of students that contain the search string
    //display matching students

}
// end Student methods
private void exit() {
    data.save();  //call the datastore method that will save to file
    out.println("\n\nGoodbye :)");
    System.exit(0);
    }
}

I'm using NetBeans and when I try to run the project I get this error:

Error: Main method not found in class assignment.Main, please define the main method as: public static void main(String[] args)

I just want to get the program running so I can understand the code better. I understand the error, but have no idea where to implement the main method in this wall of text. I've been experimenting for hours, but obviously as a newbie I'm completely useless. Any help would be greatly appreciated.

like image 254
user1410613 Avatar asked Nov 29 '22 02:11

user1410613


2 Answers

What you have currently is just a constructor named Main, what Java needs is a main method with exact signature as:

public static void main(String[] args)
  • public - so that it can be called from outside

  • static - so that no need to create an instance of your class

  • void - not going to return any value

  • args - an array for command line parameters that you can specify while running the program

This is the entry point for your application.

When your current code is being invoked, JVM is trying to locate main method, and since its not present in your code, it's throwing the exception which you have received.

Since you have mentioned beginner in your post, its worth mentioning that Java is a case sensitive language - main and Main are not same in Java.

See also: The getting started tutorial.

like image 125
mprabhat Avatar answered Dec 15 '22 00:12

mprabhat


The correct signature of main is:

public static void main(String[] args) {
   new Main();
}

It's even written in the error message you posted.

Remove the ; from the constructor:

public Main() {
    run();
}
like image 24
Tudor Avatar answered Dec 15 '22 02:12

Tudor