1

可能重复:
线程“main”中的异常 java.lang.NoSuchMethodError: main

NoSuchMethodError: main我对Java相当陌生,当我执行以下代码时,我无法弄清楚为什么我会得到。我不确定这与什么NoSuchMethodError有关。看起来我一切正常。请帮帮我。非常感谢。

public class ThreadExample1 extends Thread 
 {
    static String[] msg = {"Java", "programming", "is", "the", "best"};
    public ThreadExample1(String id) 
    {
       super(id);
     }
    @Override
    public void run() 
        {
         try 
           {
             Output.displayList(getName(), msg);
            } 
    catch (InterruptedException ex) 
        {

        }
    }
  }

class Output 
 {
  public static void displayList(String name, String list[]) throws InterruptedException 
   {
     for (int i = 0; i < list.length; i++) 
    {
          Thread.currentThread().sleep((long) (3000 * Math.random()));
          System.out.println(name + list[i]);
         }
    }
   public static void main(String[] args) 
    {
         ThreadExample1 thread1 = new ThreadExample1("thread1: ");
         ThreadExample1 thread2 = new ThreadExample1("thread2: ");
         thread1.start();
         thread2.start();
         boolean t1IsAlive = true;
         boolean t2IsAlive = true;
         do 
          {
          if (t1IsAlive && !thread1.isAlive()) 
            {
              t1IsAlive = false;
              System.out.println("t1 is dead.");
             }
          if (t2IsAlive && !thread2.isAlive()) 
            {
              t2IsAlive = false;
              System.out.println("t2 is dead.");
              }
           }while (t1IsAlive || t2IsAlive);
     }
}
4

4 回答 4

1

将文件保存为 ThreadExample1.java 并编译。之后你应该运行Output类而不是ThreadExample1类。这是因为您mainOutput 类中添加了方法。但是,由于您已将 ThreadExample1.java 类公开,您必须使用该名称(javac ThreadExample1.java)进行保存和编译。在那之后java Output

于 2011-11-23T05:56:45.317 回答
1

看一下main()方法在Output类中的代码片段。

使用以下命令行启动 Output.main() 方法:

c:\>java Output
于 2011-11-23T05:57:08.843 回答
1

我编译和执行上面的代码没有任何问题......请记住,当你想执行它时,你需要使用这个命令行:

java Output

不是

java ThreadExample1

因为 main 方法在 Output 类中,而不是在 ThreadExample1 ...

于 2011-11-23T05:57:27.640 回答
0

当你编译一个java程序时,你需要在javac之后给出文件名。

像 javac MyProgram.java

当您使用 java 运行它时,您需要提及具有“public static void main(String args[])”方法的类的名称。

假设我在 MyProgram.java 中有两个类:Class First 和 Class Second

我在第二类中有“public static void main(String args[])”,然后我将执行以下操作:

javac MyProgram.java
java Second
于 2011-11-23T06:50:22.160 回答