簡體   English   中英

為什么線程“ main”中的異常java.lang.NoSuchMethodError:main?

[英]Why Exception in thread “main” java.lang.NoSuchMethodError: main?

正如我研究的那樣,這似乎是一個常見的錯誤,但是通過我收集的信息,這主要是由於主要方法的不當行為引起的,而在這里我沒有進行任何檢查。

import java.util.Scanner;

public class NBody {

    public static void main(double T, double dt, String filename) {

        In f = new In(filename);
        int N = f.readInt();
        double R = f.readDouble();

        Planet planets[] = new Planet[N]; 

        for (int i = 0; i < N; i++) {
            planets[i] = getPlanet(f);
        }

        StdDraw.setScale(-R, R);

        for (Planet star:planets) {
            star.draw();
        }
    /*
        for (Planet star:planets) {
            star.update(dt);
            StdDraw.picture(star.x, star.y, star.imgName);
        }
    */

    }

    public static Planet getPlanet(In file) {
        double x = file.readDouble();
        double y = file.readDouble();
        double xVelocity = file.readDouble();
        double yVelocity = file.readDouble();
        double mass = file.readDouble();
        String imgName = file.readString();
        Planet p = new Planet(x, y, xVelocity, yVelocity, mass, imgName);
        return p;
    }

}

那么我該如何解決這個問題呢? 我沒有傳遞任何參數給它,而Java NBody只是失敗了(我編譯成功,我可以保證)。

您的main方法簽名錯誤。 要成為Java應用程序的入口點,它必須具有String[]類型的單個參數(以及void返回類型,並且必須是public和static):

public static void main(String[] args)

要么

public static void main(String... args)

參數名稱不重要。

您需要將命令行參數解析為適當的類型,例如

// TODO: Validation, e.g. that there are 3 command line arguments
// TODO: Use meaningful and conventional variable names
double T = Double.parseDouble(args[0]);
double dt = Double.parseDouble(args[1]);
String filename = args[2];
public static void main(String[] args)
{
double T = Double.parseDouble(args[0]);
double dt = Double.parseDouble(args[1]);
String filename = args[2];
}

如果您正在使用命令提示符

javac NBody.java

java NBody {1stparam} {1stparam} {1stparam}

javac NBody.java 
java NBody 12.2 12.3 filamename

空間是這里的分隔符

12.2 will be placed to args[0] 
12.3 will be placed to args[1] and 
filename will be placed to args[2].

由於它是字符串,您將要做

  double value = Double.parseDouble(string); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM