繁体   English   中英

即使主签名正确,也会出现“类没有接受String []的静态void main方法”错误

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

我的DrJava运行正常,但现在无论何时运行任何操作,我都会不断收到以下错误:

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

因此它将编译正常,但随后它会发芽错误。 即使我测试的所有内容确实确实具有一个公共的静态void main(String [] args),也会发生这种情况。 似乎是类路径/资源类型的错误。 我感谢任何提示

编辑:我的课

public class Test{


public static void main(String[] args){

    System.out.println(" hashmap ");

}

}

代码没有错,所以问题一定出在环境上

  • 检查你实际上执行该类 找出指定在哪里执行的类并检查其是否正确
  • 检查您正在编译类。 可能您正在查看的代码尚未编译,并且您试图执行编码main() 之前已编译的旧版本
  • 检查您的类路径。 是否可以在java命令的classpath中访问已编译的类

您无需重新安装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博士可能正在运行一个外部程序,而没有一个主要方法。

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

有时会发生此问题,因为在保存文件时可能会出错。您始终使用双引号和.java扩展名(主类)来表示该文件包含主方法。

您应该使用public的类名保存文件。如果有两个类并且都具有main方法,则应该使用public的类名保存文件,并且该类将运行。就像您的编译器在main中寻找main方法一样public static void main(String [] args),它是jvm运行程序的合同,因此它无法找到那个main方法是静态的,并且正在寻找您的Dr类。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”保存程序,则如果您在主要方法中犯了一些错误,则O / p将出现TestFirst,因为我们已经通过TestFirst保存了程序,那么您将得到错误。

@第二个错误可能是这个

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)

您的类路径设置不正确请参见上文编译成功,但运行时显示出与您相同的错误。正在使用哪种操作系统,我可以正确地指导您。

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

代码没有错。

执行环境可能有问题。 请分享细节。

  • 检查程序是否正确编译。
  • 检查.class文件的时滞。
  • 检查生成类文件的文件夹/目录的权限。
  • 检查DrJAVA是否对该目录具有适当的权限。
  • 您是否创建了文件,并使用main对其进行了编译?
  • 检查类路径。 JDK仍可能在类路径中找到先前的类文件。
  • 尝试从cmdLine而不是编辑器编译.java文件。

正如其他人提到的那样,您的代码很好。 您的环境一定有问题。 我最近在调查和回答此问题时遇到了类似的问题

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

类似的事情可能在这里起作用。 您的类路径中可能有一个用户制作的String.class 然后在你的main签名, String[] args将意味着的数组String ,当Java的医生必须寻找一个main采取了Java数组方法内置String ,即java.lang.String[] 如果您在类路径中(或在项目中?)有一个自定义String类,那么Java编译器将选择它而不是内置String 如果要从命令行编译并运行Test类,则会得到运行时错误: Exception in thread "main" java.lang.NoSuchMethodError: main

遵循@ S0urceC0ded的建议,在文本编辑器中查看Test.class时可能会发现以下问题:

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

而不是原来的样子:

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

如果是这样,请从类路径中删除您自己的String类(至少要删除.class文件,还要删除.java文件,这样就不会重新创建.class文件),然后再次编译并运行Test类。

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

如果您将Dr.Java用作IDE,则需要确保包含“ public static void main”的主类应位于程序的顶部。 否则,Dr.Java在运行时会引发此错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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