Application构造函数中的异常

时间:2016-01-05 21:17:07

标签: multithreading exception javafx main

我想用javaFX写一个Snake游戏,但有一个例外,我不知道,我想知道如何解决它。 (我知道它尚未完成)

我想知道,扩展Application的类(带启动覆盖) 正是其他程序的主要内容? 正如你所看到的,这里并不是我所不需要的静态无效主要BC,但是如果我想在我所做的地方添加main?

它是执行...

 Exception in Application constructor
Exception in thread "main" java.lang.NoSuchMethodException: Main_Snake.main([Ljava.lang.String;)
    at java.lang.Class.getMethod(Class.java:1819)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:125)

我的代码是:

import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

import java.util.ArrayList;

/**
 * Created by Nadia on 1/5/2016.
 */



public class Main_Snake extends Application{
    Snake snake = new Snake();
    Apple apple = new Apple();

    Canvas canvas = new Canvas(800, 600);
    boolean goNorth = true, goSouth, goWest, goEast;
    int x, y = 0; // marbut be apple
    boolean j = false;
    //    int gm_ov = 0; // vase game over shodan
    ArrayList<Integer> X = new ArrayList<Integer>();
    ArrayList<Integer> Y = new ArrayList<>();


    @Override
    public void start(Stage primaryStage) throws Exception {

        BorderPane b = new BorderPane(canvas);
        Scene scene = new Scene(b, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.show();

        //KeyBoard(scene);

        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent e) {
                switch (e.getText()) {
                    case "w":
                        if (!goSouth) {
                            goNorth = true;
                            goSouth = false;
                            goWest = false;
                            goEast = false;
                        }
                        break;
                    case "s":
                        if (!goNorth) {
                            goSouth = true;
                            goNorth = false;
                            goWest = false;
                            goEast = false;
                        }
                        break;
                    case "a":
                        if (!goEast) {
                            goWest = true;
                            goEast = false;
                            goSouth = false;
                            goNorth = false;
                        }
                        break;
                    case "d":
                        if (!goWest) {
                            goEast = true;
                            goWest = false;
                            goSouth = false;
                            goNorth = false;
                        }
                        break;

                }
            }
        });


        play();
    }

    public void play(){
        AnimationTimer timer = new AnimationTimer() {


            private long lastUpdate = 0;

            @Override
            public void handle(long now) {

                if (now - lastUpdate >= 40_000_000) {  // payin avordane sor@

                    snake.pos_S(); // har bar mar rasm mishe bad az move va ye sib ba X,Y khodesh rasm mishe tu tabe move dar morede tabe Point hast
                    apple.pos_A();
                    apple.random_Pos();
                    snake.Move();

                    lastUpdate = now; // sor@
                }

            }
        };

        timer.start();

    }
   /* public void KeyBoard(Scene scene) {
    }*/
}

 class Apple extends Main_Snake {


     public void random_Pos() {
         if (j == false) { // ye sib bede ke ru mar nabashe ( rasmesh tu rasme )
             do {
                 x = (int) (Math.random() * 790 + 1);
                 y = (int) (Math.random() * 590 + 1);
             } while (X.indexOf(x) != -1 && Y.get(X.indexOf(x)) == y || x % 10 != 0 || y % 10 != 0);
                        /*inja aval chek kardam tu araylist x hast ya na ag bud sharte aval ok hala sharte do ke tu Y ham mibinim tu hamun shomare khune
                        y barabare y mast ag bud pas ina bar ham montabeghan va sharte dovom ham ok . 2 sharte akhar ham vase ine ke mare ma faghat mazrab
                        haye 10 and pas ta vaghti in se shart bargharare jahayie ke ma nemikhaym va hey jaye dg mide*/

             j = true;
         }

     }

     public void pos_A() {
         GraphicsContext gc = canvas.getGraphicsContext2D();
         gc.setFill(Color.BLACK);
         gc.fillRect(x, y, 10, 10);

     }

     public void Point() {
         if (X.get(0) == x && Y.get(0) == y) {
             j = false;
         }
     }
 }


 class Snake extends Main_Snake {
    Snake(){   //cunstructor

        X.add(400);
        Y.add(300);

        X.add(400);
        Y.add(310);

        X.add(400);
        Y.add(320);


        X.add(400);
        Y.add(330);


        X.add(400);
        Y.add(340);
    }

    public void pos_S(){
        GraphicsContext gc = canvas.getGraphicsContext2D();
        gc.setFill(Color.WHITE);
        gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
        apple.pos_A();

        // keshidane mar (body yeki ezafe tar az adade morabaA mide)
        for (int i = X.size() - 1; i >= 0; i--)
            gc.fillRect(X.get(i), Y.get(i), 10, 10);

    }
    public void Move(){

        int Px = X.get(X.size() - 1);
        int Py = Y.get(Y.size() - 1);

        for (int z = X.size() - 1 ; z > 0 ; z--){
            X.remove(z);
            X.add(z , X.get(z-1) )   ;
            Y.remove(z);
            Y.add(z , Y.get(z-1) )   ;

        }

        if (goNorth) {
            Y.add(0 , Y.get(0) - 10);
            Y.remove(1);

        }
        if (goSouth) {
            Y.add(0 , Y.get(0) + 10);
            Y.remove(1);

        }
        if (goEast)  {
            X.add(0 , X.get(0) + 10);
            X.remove(1);

        }
        if (goWest)  {
            X.add(0 , X.get(0) - 10);
            X.remove(1);

        }

        apple.Point();        // emtiaz gerefte
        if ( j == false)    {
            X.add(Px);
            Y.add(Py);
        }

        if ( X.get(0) > 790 ){
            X.remove(0);
            X.add(0 , 0);
        }
        if ( X.get(0) <  0  ){
            X.remove(0);
            X.add(0 , 800);
        }
        if ( Y.get(0) > 590 ){
            Y.remove(0);
            Y.add(0 , 0);
        }
        if ( Y.get(0) <  0  ){
            Y.remove(0);
            Y.add(0 , 600);
        }

    }
}

1 个答案:

答案 0 :(得分:1)

标准Oracle Java Runtime Environment可以直接从命令行执行Application子类,即使它们不包含main方法也是如此。因此,假设您使用的是标准JRE,可以从命令行执行

java Main_Snake

它将运行(假设没有其他错误等)。

其他环境和大多数IDE都不支持此执行模式,因此如果您想在这些环境中运行(例如在Eclipse中运行),则需要启动main(...)方法您的JavaFX应用程序。所以只需添加

public static void main(String[] args) {
    launch(args);
}

Main_Snake班。