我的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 ");
}
}
答案 0 :(得分:5)
代码没有任何问题,因此问题必须出在环境。
main()
之前执行编译之前的旧版本 答案 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)
答案 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会在运行时抛出此错误。