当前位置: 首页 > 知识库问答 >
问题:

我把公共静态void main(String[]args)放在哪里?

拓拔骁
2023-03-14

我是java新手,在尝试创建一个小蛇类型的游戏后,出现了错误

错误:在类game.gamePanel中找不到Main方法,请将Main方法定义为:public static void Main(string[]args)“

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);
         }

    }

}

共有1个答案

戚祺
2023-03-14

您可以将它添加到GamePanel中,但是您需要创建一个JFrame并且您希望将GamePanel的实例添加到它中。比如,

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);
        }
    });
}
 类似资料:
  • 这是我第一次在这个网站上寻求帮助。我需要将JFrame和JMenubar从公共静态void main(String[]args)中移动。 这是我需要从公共静态void main(String[]args)移动的代码 我尝试将其移到GRandom()类(它是主类),并使公共静态void main(String[]args)看起来如下所示: 请帮帮我,如何将它移到GRandom()类,或者制作另一个类

  • 在Vaadin 10-14中,我应该将静态文件放在哪里,例如CSS、JavaScript和聚合模板?静态文件(如图像)如何? 此外,如何在Vaadin中导入这些文件?Vaadin 14与npm和Vaadin 10-13与bower之间有差异吗?

  • 问题内容: 和之间有什么区别? 例如 : 要么 问题答案: 尽管您 确实 希望遵守约定,但在功能上没有什么区别(字节码将 完全相同 ),请访问JLS-8.3.1。场修饰符: __ 这将是奇怪的,看.. 我也建议您访问checkstyle。 编辑: 从同一页面链接到该部分: http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls

  • 问题内容: 在下面的摘录中,您如何向 初学者 很好地解释的含义和用法? 问题答案: 我将向初学者介绍有关Main函数的Wiki文章,然后对此进行补充。 Java只开始运行具有特定签名的程序,并且人们可以将签名视为自己的名字-这就是Java如何分辨别人的签名和true 的区别。 是s 的集合,以空格分隔,可以在终端上将其键入程序中。初学者不会多次使用此变量,但总是以防万一。

  • 若需要在 San CLI UI内建的http服务器上暴露一些静态文件,例如:为自定义视图指定图标。可以通过在插件包根目录里可选的放置一个public文件夹,这个文件夹里的任何文件都会暴露至 /_plugin/:id/* 的http路由。 例如,如果将 x-logo.png 文件放置到 san-cli-ui-widget-x/public/ 文件夹,那么 cli-ui 加载插件的时候可以通过 /_p