简体   繁体   中英

Getting “class does not have a static void main method accepting String[]” error even though main signature is correct

My DrJava was working fine, but now I keep getting the folowing error whenever I run anything:

Static Error: This class does not have a static void main method accepting String[].

So it will compile OK, but then it shoots out the error . This happens even though everything I test does indeed have a public static void main(String[] args) in it. It seems like a classpath/resources type of error. I appreciate any tips

EDIT: my class

public class Test{


public static void main(String[] args){

    System.out.println(" hashmap ");

}

}

There's nothing wrong with the code , so the problem must be with the environment .

  • Check that you're actually executing that class. Find out where the class that's executed is specified and check it's correct
  • Check that you're compiling the class. Maybe the code you're looking at has not been compiled and you're trying to execute an old version that was compild before you coded a main()
  • Check your classpath. Is the compiled class accessible in the classpath of the java command

You don't need to reinstall java, nor is it a java version issue. It may be the way that your are running the program. To check if it is a problem with your code, do the following:

Make a new folder and put Test.java in it.

Open up Command Line Or Terminal and change to that folder .

Type javac Test.java . Test.class should be in the folder now.

If you want, open up the class with a text editor. This is what I get:

˛∫æ2

<init>()VCodeLineNumberTablemain([Ljava/lang/String;)V
SourceFile      Test.java        hashmap                  Testjava/lang/Objectjava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/l    ang/String;)V!  *∑±
    %   ≤∂±

Back to the command line or terminal, type java Test .

If you get an error, which you shouldn't, I don't know what to say. It should produce the string " hashmap " on to the command line or terminal.

Why re-installing Dr. Java may not work is because you may be using the same working directory, causing same run settings to be used. Dr. Java may be running an external program, one without a main method.

I think that you should install the Eclipse IDE for Java. It is much easier to get around, it looks nicer, and it runs the file or project that you are looking at currently.

Sometimes this problem happens because may be mistake in saving file.you always your file using double quotes and with the .java extension which is main class means that class containing main method.

you should save your file by class name which is public .if there is two classes and both have main method then you should save your file by class name that is public and that class will be run.As like your compiler looking for main method in public static void main(String [] args) that is contract for jvm to run a programme so it is not able to found that main method that is static and it looking for your Dr class.java See this Example it have two main methods and practice these kinds of question.I also got this kind of problem in starting.

public class TestFirst
{
 public static void main(String   [] args){

System.out.println(" TestFirst ");

}

}

class Test{

public static void main(String   [] args){

System.out.println(" hashmap ");

}

}

if you save pro-gramme by "TestFirst.java" then o/p will come TestFirst if you do some mistake in main method because we have saved our programme by TestFirst then you will get error like you got.

@ 2nd mistake may be this

debian@debian:~/Geany_java$ javac Test1.java
debian@debian:~/Geany_java$ java Test1
    Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
at Test1.main(Test1.java:11)

your classpath has not set properly See above Compiling successfully but running showing same kind of error you got.Which OS is using I can guide you properly.

检查您的文件实际上是否具有.java终止符或.dj

There is nothing wrong with the code.

It is the executing environment which might have problem. Please share the details.

  • Check if program compiled correctly.
  • Check time-stamo of .class file.
  • Check permissions on folder/directory where class-files are getting generated.
  • Check if DrJAVA has appropriate permission on the directory.
  • Did you create a file, compiled it with out main?
  • Check class-path. Might be possible that previous class file is still being found by JDK in classpath.
  • Try compiling .java file from cmdLine instead of editor.

As others have mentioned, your code is fine. There must be a problem with your environment. I recently experienced a similar issue when investigating and answering this question .

Basically, in that question, the code Void.class instanceof Class resulted in a compiler error because a user-made Class.class existed in the classpath, so one Class (the Java built-in java.lang.Class ) didn't match with the given Class (user-made).

Something similar may be at work here. It is possible that there is a user-made String.class in your classpath. Then in your main signature, String[] args would mean an array of your String , when Dr. Java must be looking for a main method taking an array of the Java built-in String , ie java.lang.String[] . If you have a custom String class in your classpath (or in your project?), then the Java compiler will choose it over the built-in String . If you were to compile and run your Test class from the command line, then you would get the runtime error: Exception in thread "main" java.lang.NoSuchMethodError: main .

Following @S0urceC0ded's suggestion, you may find this when looking at Test.class in a text editor:

main([LString;)V  // A user-made String class

instead of what it's supposed to be:

main([Ljava/lang/String;)V  // The built-in java.lang.String class

If so, remove your own String class (at least the .class file, but also the .java file so the .class file isn't re-created) from the classpath, and compile and run your Test class again.

Without a look at your environment, I can't tell for sure that this is the issue. But it can explain it.

If you are using Dr.Java as IDE, then you need to make sure that the main class containing 'public static void main' should be at the very top of your program. Otherwise Dr.Java throws this error during runtime.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM