0

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

}

}
4

8 回答 8

5

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

  • 检查你是否真的在执行那个。找出指定执行的类的位置并检查它是否正确
  • 检查您是否正在编译该类。也许您正在查看的代码尚未编译,并且您正在尝试执行在编写代码之前已编译的旧版本main()
  • 检查你的类路径。java命令的classpath中是否可以访问编译后的类
于 2013-07-28T05:11:48.740 回答
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。它更容易绕过,看起来更好,并且它运行您当前正在查看的文件或项目。

于 2013-07-29T19:21:25.017 回答
2

有时会发生此问题,因为在保存文件时可能会出错。您始终使用双引号和带有 .java 扩展名的文件是主类意味着该类包含主方法。

你应该用公共的类名保存你的文件。如果有两个类并且都有主方法,那么你应该用公共的类名保存你的文件,并且该类将被运行。就像你的编译器在寻找主方法一样public static void main(String [] args) 是 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 保存了我们的程序,那么您将得到像您一样的错误。

@第二个错误可能是这个

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)

你的类路径没有正确设置见上面编译成功但运行显示你得到的同样类型的错误。使用哪个操作系统我可以正确指导你。

于 2013-07-30T19:05:02.893 回答
1

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

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

类似的东西可能在这里起作用。您的类路径中可能存在用户自String.class定义。然后在您的main签名中,将意味着String[] args的数组,当 Java 博士必须寻找采用 Java 内置数组的方法时,即. 如果您的类路径(或项目中?)中有一个自定义类,那么 Java 编译器将选择它而不是内置的. 如果你从命令行编译和运行你的类,那么你会得到运行时错误:. StringmainStringjava.lang.String[]StringStringTestException 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再次编译并运行您的类。

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

于 2013-07-30T23:39:18.483 回答
1

代码没有问题。

可能是执行环境有问题。请分享详细信息。

于 2013-07-30T08:50:52.937 回答
1

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

于 2013-07-20T22:23:50.017 回答
1
  • 检查程序是否正确编译。
  • 检查 .class 文件的时间戳。
  • 检查生成类文件的文件夹/目录的权限。
  • 检查 DrJAVA 是否对该目录具有适当的权限。
  • 您是否创建了一个文件,并在没有 main 的情况下对其进行了编译?
  • 检查类路径。JDK 可能仍在类路径中找到以前的类文件。
  • 尝试从 cmdLine 而不是编辑器编译 .java 文件。
于 2013-07-30T10:31:58.293 回答
0

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

于 2016-04-09T14:00:16.433 回答