“线程中的异常”;“主要”;java.lang.NoSuchMethodError:main

“线程中的异常”;“主要”;java.lang.NoSuchMethodError:main,java,Java,当我试图编译此文件时: public class Risk { } class territory { public static void main (String[]arg) { System.out.println ("hi") ; } } 我收到以下错误消息: Exception in thread "main" java.lang.NoSuchMethodError: main 这里怎么了 你想上什么课?如果您使用的是类territ

当我试图编译此文件时:

public class Risk
{
}
class territory 
{

    public static void main (String[]arg) 
    {
        System.out.println ("hi") ; 
    } 
}
我收到以下错误消息:

Exception in thread "main" java.lang.NoSuchMethodError: main

这里怎么了

你想上什么课?如果您使用的是类
territory
,则该选项将起作用<代码>风险没有
main
方法。

包含
main()
函数的类必须是公共类,并且每个文件只能定义一个公共类。您需要有两个独立的文件
Risk.java
Territory.java

Risk.java:

public class Risk {
}
Territory.java:

public class Territory 
{

    public static void main (String[]arg) 
    {
        System.out.println ("hi") ; 
    } 
}
编辑:事实证明这不是真的-我可以使用以下命令行运行您的初始代码:

java territory

但我之前的评论指出了真正的应用程序的最佳实践,比如风险游戏。

这可能只是一个间隔问题吗?您的原始帖子在']'和'arg'之间没有显示空格

试试这个:

public static void main (String[] arg) 
或者,如果这仍然不起作用:

public static void main (String arg[]) 

答案是,我运行的类必须包含
main
,否则它将无法工作。我之所以发布这篇文章是因为,尽管其他答案给出的信息大致相同,但它们并没有明确说明

你能找出这个例子导致相同问题的原因吗

public class Simple {
    public void main(String args[]) {
        System.out.println("Inside function");
    }
}

答:因为main()应该是publicstaticvoid

-1不,这两项都是无关紧要的考虑因素。(通常我不会对帖子投反对票,但那些认为格式改变会产生任何影响的帖子表明我对语言有着深刻的误解。)@Adrian:有时候,是的。(
classFoo
不同于
classFoo
)其他时候,比如在这里,不。知道什么时候会有所不同是一个有能力的程序员的标志。人们不需要为投票否决一个明显错误的答案找借口。否决不正确的答案会鼓励人们在发布前核实事实。@elduff:说格式有利于可读性是一回事。另一种说法是它改变了语言的语义。(在像Python这样的语言中,格式确实会改变语义,但我们在这里讨论的是Java。)作为一名优秀的程序员,意味着你能够分辨出哪个是哪个。@Adrian:取决于你如何定义“深刻的误解”。对我来说,如果一个人不了解在给定语言中代码是如何标记的(例如,在Java中,
String[]args
String[]args
),这说明他们对语言的理解程度。这个社区Wiki问题列出了这个常见问题的可能原因: