即使主签名正确,获取“类没有静态void main方法接受String []”错误

时间:2013-07-20 20:43:18

标签: java

我的DrJava工作正常,但现在每当我运行任何东西时我都会收到以下错误:

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

所以它会编译好,但随后就会发现错误。即使我测试的所有内容确实都有一个public static void main(String [] args),也会发生这种情况。它似乎是类路径/资源类型的错误。我很感激任何提示

编辑:我的班级

public class Test{


public static void main(String[] args){

    System.out.println(" hashmap ");

}

}

8 个答案:

答案 0 :(得分:5)

代码没有任何问题,因此问题必须出在环境

  • 检查您实际执行 类。找出指定执行的类的位置并检查它是否正确
  • 检查您是否正在编译课程。也许您正在查看的代码尚未编译,并且您尝试在编码main()之前执行编译之前的旧版本
  • 检查您的类路径。编译的类是否可以在java命令的类路径中访问

答案 1 :(得分:3)

您不需要重新安装java,也不是Java版本问题。它可能是您运行该程序的方式。 要检查代码是否有问题,请执行以下操作:

创建一个新文件夹并将Test.java放入其中。

打开命令行终端并切换到该文件夹​​。

输入 javac Test.java 。 Test.class现在应该在文件夹中。

如果需要,请使用文本编辑器打开课程。这就是我得到的:

˛∫æ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!  *∑±
    %   ≤∂±

返回命令行或终端,键入 java Test

如果你得到一个你不应该犯的错误,我不知道该说些什么。它应该在命令行或终端上生成字符串“hashmap”。

为什么重新安装Dr. Java可能不起作用是因为您可能正在使用相同的工作目录,导致使用相同的运行设置。 Java博士可能正在运行一个没有主要方法的外部程序。

我认为您应该为Java安装Eclipse IDE。它更容易出行,看起来更好,并且它运行您当前正在查看的文件或项目。

答案 2 :(得分:2)

有时候会出现这个问题,因为在保存文件时可能会出错。你总是使用双引号和扩展名为.java的文件表示包含main方法的类。

你应该按公共类名保存你的文件。如果有两个类,并且都有main方法,那么你应该按公共类名保存你的文件,并且该类将被运行。就像你的编译器一样public static void main(String [] args)中的main方法,它是jvm运行程序的契约 所以它无法找到静态的main方法并且它正在寻找你的Dr class.java 看到这个例子它有两个主要的方法并练习这类问题。我在启动时也遇到了这种问题。

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 ");

}

}

如果您通过“TestFirst.java”保存程序,那么如果您在main方法中执行了一些错误,那么o / p将来到TestFirst,因为我们已经通过TestFirst保存了我们的程序,那么您将得到类似的错误。

@ 2nd错误可能就是这个

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)

您的类路径设置不正确请参阅上面编译成功但运行显示您遇到的同类错误。操作系统正在使用我可以正确引导您。

答案 3 :(得分:1)

检查您的文件实际上是.java终止还是.dj

答案 4 :(得分:1)

代码没有问题。

可能存在问题的执行环境。请分享详细信息。

答案 5 :(得分:1)

  • 检查程序编译是否正确。
  • 检查.class文件的时间标准。
  • 检查生成类文件的文件夹/目录的权限。
  • 检查DrJAVA是否对目录具有适当的权限。
  • 您是否创建了一个文件,用main编译它?
  • 检查类路径。 JDK在类路径中仍然可以找到以前的类文件。
  • 尝试从cmdLine而不是编辑器编译.java文件。

答案 6 :(得分:1)

正如其他人所说,你的代码很好。您的环境一定存在问题。我最近在investigating and answering this question时遇到了类似的问题。

基本上,在该问题中,代码Void.class instanceof Class导致编译器错误,因为类路径中存在用户自制的Class.class,因此一个Class(Java内置{ {1}})与给定的java.lang.Class(用户自制)不匹配。

类似的东西可能在这里起作用。您的类路径中可能存在用户自定义的Class。然后在您的String.class签名中,{Java}必须寻找main方法时,String[] args意味着您的 String数组Java内置main的数组,即String。如果您的类路径(或项目中)有自定义java.lang.String[]类,那么Java编译器将通过内置String选择它。如果您要从命令行编译并运行String类,那么您将收到运行时错误:Test

按照@ S0urceC0ded的建议,您可以在文本编辑器中查看Exception in thread "main" java.lang.NoSuchMethodError: main时找到此信息:

Test.class

而不是它应该是什么:

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

如果是这样,请从类路径中删除您自己的main([Ljava/lang/String;)V // The built-in java.lang.String class 类(至少是.class文件,但也是.java文件,以便不重新创建.class文件),并编译并运行String再次上课。

如果不了解您的环境,我无法确定这是问题所在。但它可以解释它。

答案 7 :(得分:0)

如果您使用Dr.Java作为IDE,那么您需要确保包含'public static void main'的主类应该位于程序的最顶层。否则,Dr.Java会在运行时抛出此错误。