简体   繁体   English

我应该把 public static void main(String[] args) 放在哪里?

[英]Where do I put public static void main(String[] args)?

I am new to java, and after attempting to create a small snake type game, and error occurred我是java新手,在尝试创建一个小蛇类游戏后,出现错误

Error: Main method not found in class Game.GamePanel, please define the main method as: public static void main(String[] args)"错误:在类 Game.GamePanel 中找不到 Main 方法,请将 main 方法定义为:public static void main(String[] args)"

Could someone please help me as to fixing the error?有人可以帮我解决错误吗? It would be a big help as a beginner to java.作为java初学者,这将是一个很大的帮助。 Im using Eclipse latest version我使用的是 Eclipse 最新版本

package Game;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;

import javax.swing.JPanel;

public class GamePanel extends JPanel implements Runnable, KeyListener {
    public static final int WIDTH = 1000;
    public static final int HEIGHT = 1000;
    //Render
    private Graphics2D g2d;
    private BufferedImage image;

    //GameLoop
    private Thread thread;
    private boolean running;
    private long targetTime;

    //Game Stuff
    private final int SIZE = 10;
    Entity head;
    ArrayList<Entity> snake;

    //movement
    private int dx, dy;

    //key input
    private boolean up,down,right,left,start;

    public GamePanel() {
        setPreferredSize(new Dimension(WIDTH, HEIGHT));
        setFocusable(true);
        requestFocus();
        addKeyListener(this);
    }
    public void addNotify() {
        super.addNotify();
        thread = new Thread(this);
        thread.start();
    }
    private void setFPS(int fps) {
        targetTime = 1000 / fps;
    }

    @Override
    public void keyTyped(KeyEvent e) {


    }

    @Override
    public void keyPressed(KeyEvent e) {
        int k = e.getKeyCode();

        if(k == KeyEvent.VK_UP) up = true;
        if(k == KeyEvent.VK_DOWN) down = true;
        if(k == KeyEvent.VK_LEFT) left = true;
        if(k == KeyEvent.VK_RIGHT) right = true;
        if(k == KeyEvent.VK_ENTER) start = true;

    }

    @Override
    public void keyReleased(KeyEvent e) {
        int k = e.getKeyCode();

        if(k == KeyEvent.VK_UP) up = false;
        if(k == KeyEvent.VK_DOWN) down = false;
        if(k == KeyEvent.VK_LEFT) left = false;
        if(k == KeyEvent.VK_RIGHT) right = false;
        if(k == KeyEvent.VK_ENTER) start = false;

    }

    @Override
    public void run() {
        if(running) return;
        init();
        long startTime;
        long elapsed;
        long wait;
        while(running){
            startTime = System.nanoTime();

            update();
            requestRender();

            elapsed = System.nanoTime() - startTime;
            wait = targetTime - elapsed / 1000000;
            if(wait > 0) {
                try {
                    Thread.sleep(wait);
                }catch(Exception e) {
                    e.printStackTrace();
                }
            }
        }

    }
    private void init() {
        image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_ARGB);
        g2d = image.createGraphics();
        running = true;
        setUplevel();
        setFPS (10);
    }
    private void setUplevel() {
        snake = new ArrayList<Entity>();
        head = new Entity(SIZE);
        head.setPosition(WIDTH / 2, HEIGHT / 2);
        snake.add(head);

        for(int i = 1;i < 10;i++) {
            Entity e = new Entity(SIZE);
            e.setPosition(head.getX() + (i * SIZE), head.getY());
            snake.add(e);
        }

    }
    private void requestRender() {
        render(g2d);
        Graphics g = getGraphics();
        g.drawImage(image, 0,0,null);
        g.dispose();    
    }

    private void update() {
        if(up && dy == 0) {
            dy = -SIZE;
            dx = 0;
        }
        if(down && dy == 0) {
            dy = SIZE;
            dx = 0;
        }
        if(left && dx == 0) {
            dy = 0;
            dx = -SIZE;
        }
        if(right && dx == 0) {
            dy = 0;
            dx = SIZE;
        }

            if(dx != 0 || dy != 0) {
            for(int i =  snake.size() - 1;i > 0;i--) {

                snake.get(i).setPosition(
                        snake.get(i - 1).getX(),
                        snake.get(i - 1).getY()
                        );
            }
            head.move(dx, dy);
        }



        if(head.getX() < 0 ) head.getX(WIDTH);
        if(head.getY() < 0 ) head.getY(HEIGHT);
        if(head.getX() > WIDTH ) head.getX(0);
        if(head.getY() > HEIGHT ) head.getY (0);
    }

    public void render(Graphics2D g2d) {
         g2d.clearRect(0, 0, WIDTH, HEIGHT);

         g2d.setColor(Color.GREEN);
         for(Entity e : snake) {
             e.render(g2d);
         }

    }

}

You can add it to GamePanel , but you need to create a JFrame and you want to add an instance of your GamePanel to it.您可以将它添加到GamePanel ,但您需要创建一个JFrame并且您想向其中添加您的GamePanel实例。 Something like,就像是,

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JFrame frame = new JFrame();
            frame.add(new GamePanel());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我应该在哪里放置“公共静态void main(String [] args)”? - Where will i put “Public static void main(String[] args)”? 我在哪里添加公共 static void main(String[] args) - where do i add the public static void main(String[] args) 我必须在公共静态void main(String args [])中使用名称args吗? - Do I have to use the name args in public static void main(String args[]) 为什么 eclipse 在我写 public static void main(String[] args) 的行中显示错误 - Why eclipse show me error in the line where i have written public static void main(String[] args) 了解公共静态void main(String [] args) - Understanding public static void main(String[] args) 对main方法的误解/“ public static void main(String [] args)”的观点 - Misunderstanding main method/the point of “public static void main(String[] args)” public static void main(String args[]) 为什么 string args[] 是强制性的,为什么我们不使用 public static void main(Object args[])? - public static void main(String args[]) why string args[] is compulsory ,why we not use public static void main(Object args[])? 需要添加“ public static void main(String [] args)”, - Need to add a “public static void main(String[] args)”, public static void main(String[] args) 抛出异常 - public static void main(String[] args) throws Exception 使用 int 而不是 String:public static void main (int[] args) - Using int Instead Of String: public static void main (int[] args)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM