Java &引用;构造函数窗口(int,int,String,Game)未定义;

Java &引用;构造函数窗口(int,int,String,Game)未定义;,java,string,constructor,int,undefined,Java,String,Constructor,Int,Undefined,我对2D平台游戏有问题。我得到一个错误,读什么问题的标题说。这是我的Game.java和Window.java文件。请告诉我该怎么办。 我尝试了很多事情,但我不知道该去哪里或做什么。提前感谢:) Window.java package com.sam.platform.window; import java.awt.Dimension; import javax.swing.JFrame; public class Window { public Window(

我对2D平台游戏有问题。我得到一个错误,读什么问题的标题说。这是我的Game.java和Window.java文件。请告诉我该怎么办。 我尝试了很多事情,但我不知道该去哪里或做什么。提前感谢:)

Window.java

package com.sam.platform.window;    
import java.awt.Dimension;    
import javax.swing.JFrame;    

public class Window
{
    public Window(int w, int h, String title, Game game)
    {
        game.setPreferredSize(new Dimension(w, h));
        game.setMaximumSize(new Dimension(w, h));
        game.setMinimumSize(new Dimension(w, h));

        JFrame frame = new JFrame(title);
        frame.add(game);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(true);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        game.start();
    }

}
package com.sam.platform.window;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Window;
import java.awt.image.BufferStrategy;

import com.sam.platform.framework.ObjectId;

public class Game extends Canvas implements Runnable
{
    private static final long serialVersionUID = -414187095722102896L;
    private boolean running = false;
    private Thread thread;

    public static int WIDTH, HEIGHT;
    //Object
    Handler handler;


    private void init()
    {
        WIDTH = getWidth();
        HEIGHT = getHeight();


        handler = new Handler();

        handler.addObject(new Player(100, 100, handler, ObjectId.Player));

        handler.createLevel();

        this.addKeyListener(new KeyInput(handler));
    }


    public synchronized void start(){
        if(running)
            return;

        running = true;
        thread = new Thread(this);
        thread.start();

    }

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

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

    private void tick()
    {
        handler.tick();
    }

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

        Graphics g = bs.getDrawGraphics();
        //////////////////////////////////
        //Draw Here
        g.setColor(Color.black);
        g.fillRect(0, 0, getWidth(), getHeight());

        handler.render(g);

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

    }   
    public static void main(String args[]){
        new Window(900, 900, "Hop", new Game()); //error is here "The constructor                 Window(int, int, String, Game) is undefined"

    }


}
Game.java

package com.sam.platform.window;    
import java.awt.Dimension;    
import javax.swing.JFrame;    

public class Window
{
    public Window(int w, int h, String title, Game game)
    {
        game.setPreferredSize(new Dimension(w, h));
        game.setMaximumSize(new Dimension(w, h));
        game.setMinimumSize(new Dimension(w, h));

        JFrame frame = new JFrame(title);
        frame.add(game);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(true);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        game.start();
    }

}
package com.sam.platform.window;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Window;
import java.awt.image.BufferStrategy;

import com.sam.platform.framework.ObjectId;

public class Game extends Canvas implements Runnable
{
    private static final long serialVersionUID = -414187095722102896L;
    private boolean running = false;
    private Thread thread;

    public static int WIDTH, HEIGHT;
    //Object
    Handler handler;


    private void init()
    {
        WIDTH = getWidth();
        HEIGHT = getHeight();


        handler = new Handler();

        handler.addObject(new Player(100, 100, handler, ObjectId.Player));

        handler.createLevel();

        this.addKeyListener(new KeyInput(handler));
    }


    public synchronized void start(){
        if(running)
            return;

        running = true;
        thread = new Thread(this);
        thread.start();

    }

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

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

    private void tick()
    {
        handler.tick();
    }

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

        Graphics g = bs.getDrawGraphics();
        //////////////////////////////////
        //Draw Here
        g.setColor(Color.black);
        g.fillRect(0, 0, getWidth(), getHeight());

        handler.render(g);

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

    }   
    public static void main(String args[]){
        new Window(900, 900, "Hop", new Game()); //error is here "The constructor                 Window(int, int, String, Game) is undefined"

    }


}

您的
窗口
类很好,但是您在
游戏
中导入的类是
java.awt.Window

您可以通过执行new
com.sam.platform.window.window(…)
来解决这个问题,但我建议您不要这样做,这只会让您感到困惑


将该类重命名为类似于
GameWindow
的类。

您的
Window
类很好,但是您在
Game
中导入的类是
java.awt.Window

您可以通过执行new
com.sam.platform.window.window(…)
来解决这个问题,但我建议您不要这样做,这只会让您感到困惑


将类重命名为类似于
GameWindow
的名称。

Game
类中使用了两个名为
Window
的不同类。一个是
com.sam.platform.window.window
。另一个是
java.awt.Window
。由于您已将
java.awt.Window
导入到
Game
类中,它认为您正在尝试实例化其中一个(而不是您自己的
Window
类)


我建议您将自己的类重命名为
GameWindow
,以消除歧义(并避免混淆)。您的
游戏
类中使用了两个名为
Window
的不同类。一个是
com.sam.platform.window.window
。另一个是
java.awt.Window
。由于您已将
java.awt.Window
导入到
Game
类中,它认为您正在尝试实例化其中一个(而不是您自己的
Window
类)


我建议您重命名自己的类以消除歧义(并避免混淆),比如说,
GameWindow

您是如何实例化
Window
类的?顺便说一句,这是您使用AWT(即Window、Canvas)而不是Swing(例如JFrame、JPanel)的一个很好的理由吗?或者,想想看,JavaFX。(据我所知,Oracle从Java 1.8开始停止了Swing的开发,转而支持JavaFX。)您是如何实例化
Window
class的?顺便说一句,这是您使用AWT(即Window、Canvas)而不是Swing(例如JFrame、JPanel)的一个很好的理由?或者,想想看,JavaFX。(据我所知,Oracle正在从Java1.8开始停止Swing的开发,转而支持JavaFX。)谢谢!我删除了import java.awt.Window,现在可以正常工作了!你真棒!可以但是将您自己的类重命名为其他类,然后
窗口
;你不会后悔的。另外——正如我上面的评论——你使用AWT类而不是Swing(或JavaFX)有什么原因吗?每当我在eclipse中导入一个类时,它会自动标记为AWT。我不能更改类名,因为我需要重写很多东西。我还有大约10个使用window.class导入的类。我认为离开它可能更容易。@lilsam138您需要查找“重构”,如果您使用Alt+Shift+Rhanks重命名该类,Eclipse将自动调整其余代码!我删除了import java.awt.Window,现在可以正常工作了!你真棒!可以但是将您自己的类重命名为其他类,然后
窗口
;你不会后悔的。另外——正如我上面的评论——你使用AWT类而不是Swing(或JavaFX)有什么原因吗?每当我在eclipse中导入一个类时,它会自动标记为AWT。我不能更改类名,因为我需要重写很多东西。我还有大约10个使用window.class导入的类。我认为离开它可能会更容易。@lilsam138您需要查找“重构”,如果您使用Alt+Shift+RI重命名该类,Eclipse将自动调整其余代码。刚刚删除了导入“java.awt.Window”它现在工作正常:)我刚删除了导入“java.awt.Window”它现在工作正常:)