Почему мой компилятор показывает ошибку «Не найден подходящий конструктор для Window (int, int, String, Game)»? - PullRequest
0 голосов
/ 19 января 2020

Я учусь создавать игру с помощью этого урока на YouTube: https://www.youtube.com/watch?v=1gir2R7G9ws

Я уже несколько раз просматривал код и не могу найти несоответствие между моим кодом и кодом, используемым в руководстве. Я также получаю эту информацию в своем терминале:

новое окно (ШИРИНА, ВЫСОТА, «Давайте создадим игру!», Это); ^ Конструктор Window.Window (GraphicsConfiguration) не применим (фактические и формальные списки аргументов различаются по длине)

constructor Window.Window() is not applicable
  (actual and formal argument lists differ in length)

constructor Window.Window(Frame) is not applicable
  (actual and formal argument lists differ in length)

constructor Window.Window(Window) is not applicable
  (actual and formal argument lists differ in length)

constructor Window.Window(Window,GraphicsConfiguration) is not applicable
  (actual and formal argument lists differ in length)

Вот моя игра. java:

package com.tutorial.main;

import java.awt.*;
import java.awt.Canvas;
import java.awt.image.BufferStrategy;

public class Game extends Canvas implements Runnable {

        private static final long serialVersionUID = 8073316534757788976L;

        public static final int WIDTH = 640, HEIGHT = WIDTH/12*9;

        private Thread thread;
        private boolean running = false;

        public Game(){
                new Window(WIDTH, HEIGHT, "Let's Build A Game!", this);
        }

        public synchronized void start() {
                thread = new Thread(this);
                thread.start();
                running = true;
        }

        public synchronized void stop(){
                try{
                        thread.join();
                        running = false;
                }catch(Exception e) {
                        e.printStackTrace();
                }
        }

        public void run(){
                long lastTime = System.nanoTime();
                double amountOfTicks = 60.0;
                double ns = 100000000 / amountOfTicks;
                double delta = 0;
                long timer = System.currentTimeMillis();
                int frames = 0;
                while(running){
                        long now = System.nanoTime();
                        delta += (now - lastTime) /ns;
                        lastTime = now;
                        while(delta >= 1){
                                tick();
                                delta--;
                        }
                        if(running){
                                render();
                        }
                        frames++;

                        if(System.currentTimeMillis() - timer > 1000){
                                timer+=1000;
                                System.out.println("FPS: " + frames);
                                frames = 0;
                        }
                }
                stop();
        }

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

        private void tick(){

        }
        private void render(){
                BufferStrategy bs = this.getBufferStrategy();
                if(bs==null){
                        this.createBufferStrategy(3);
                        return;
                }

                Graphics g = bs.getDrawGraphics();

                g.setColor(Color.black);
                g.fillRect(0,0,WIDTH,HEIGHT);

                g.dispose();
                bs.show();

        }
}

А вот мое окно. java:

package com.tutorial.main;

import java.awt.Canvas;
import java.awt.Dimension;

import javax.swing.JFrame;


public class Window extends Canvas{

    private static final long serialVersionUID = -3359827712233484029L;

    public Window(int width, int height, String title, Game game){
        JFrame frame = new JFrame(title);

        frame.setPreferredSize(new Dimension(width, height));
        frame.setMaximumSize(new Dimension(width, height));
        frame.setMinimumSize(new Dimension(width, height));

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.add(game);
        frame.setVisible(true);
        game.start();


    }
}

Кто-нибудь видит проблему?

1 Ответ

1 голос
/ 19 января 2020

Класс Game в представленном коде import java.awt.*. Есть класс Window в java.awt. Этот класс не имеет списка аргументов конструктора int, int, String, Game и "теней" класса Window в пакете com.tutorial.main для Game. Таким образом, ошибка компиляции.

Не следует использовать звездочку (*) для импорта, а вместо этого использовать указать c import. Если используется указанный c импорт (как показано в предоставленном руководстве), ошибка не произойдет.

...