首页 > 解决方案 > 构造函数 Window() 不可见

问题描述

我刚开始用 Java 编程。上课有问题。当我尝试在我的项目中使用 Windows 时,它一直显示此错误: 此行有多个标记 - 构造函数 Window() 不可见 - 构造函数 Window(GameContainer) 未定义

我试着让我的班级公开,但没有帮助。任何人都可以帮助我吗?错误显示在主类的窗口行上。感谢任何人的帮助:)

主类:

package g_core_engine;

import java.awt.Window;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

public class GameContainer implements Runnable{

    private Thread thread;
    private Window window;
    private boolean running = false;
    private final double UPDATE_CAP = 1.0 / 60.0;
    private int width = 320, height = 240;
    private float Scale = 4;
    private String title = "g_core_engine v1.0";
    
    public GameContainer()
    {
        
    }
    
    //Method that starts the actual computing of the game
    public void start()
    {
        window = new Window();
        
        thread = new Thread(this);
        thread.run();
    }
    
    public void stop()
    {
        
    }
    
    //Method that contains the update and render loops
    public void run()
    {
        running = true;
        
        boolean render = false;
        enter code heredouble firstTime = 0;
        double lastTime = System.nanoTime() / 1000000000.0;
        double passedTime = 0;
        double unprocessedTime = 0;
        
        double frameTime = 0;
        int frames = 0;
        int fps = 0;
        
        
        while(running)
        {
            render = false;
            firstTime = System.nanoTime() / 1000000000.0;
            passedTime = firstTime - lastTime;
            lastTime = firstTime;
            
            unprocessedTime += passedTime;
            frameTime += passedTime;
            
            while(unprocessedTime >= UPDATE_CAP)
            {
                unprocessedTime -= UPDATE_CAP;
                
                render = true;
                //TODO: Update Game
                if(frameTime >= 1.0)
                {
                    frameTime = 0;
                    fps = frames;
                    frames = 0;
                    System.out.println("FPS: "+fps);
                }
            }
            
            if(render)
            {
                //TODO: Render Game
                window.update();
                frames++;
            }
            else
            {
                try
                {
                    thread.sleep(1);
                }
                catch(Exception ex)
                {
                    ex.printStackTrace();
                }
            }
        }
        
        dispose();
    }
    
    public void dispose()
    {
        
    }
    
    //Main method that runs on program start
    public static void main(String[] args)
    {
        new GameContainer().start();

    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getScale() {
        // TODO Auto-generated method stub
        return 0;
    }

}

第二类:

package g_core_engine;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

public class Window 
{
    private JFrame frame;
    private BufferedImage image;
    private Canvas canvas;
    private BufferStrategy bs;
    private Graphics g;
    
    public Window (GameContainer gc) 
    {
    image = new BufferedImage(gc.getWidth(), gc.getHeight(), BufferedImage.TYPE_INT_RGB);
    canvas = new Canvas();
    Dimension s = new Dimension((int)(gc.getWidth() * gc.getScale()), (int)(gc.getHeight() * gc.getScale()));
    canvas.setPreferredSize(s);
    canvas.setMaximumSize(s);
    canvas.setMinimumSize(s);
    
    frame = new JFrame(gc.getTitle());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());
    frame.add(canvas, BorderLayout.CENTER);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.setVisible(true);
    
    canvas.createBufferStrategy(2);
    bs = canvas.getBufferStrategy();
    g = bs.getDrawGraphics();
    }
    public void update()
    {
        g.drawImage(image, 0, 0, canvas.getWidth(), canvas.getHeight(), null);
        bs.show();
    }
}

标签: java

解决方案


看起来您导入了一个 Window 类:

import java.awt.Window;

因此,当您尝试创建“窗口”的实例时,它实际上是在尝试创建 java.awt.Window。小心类名。更改您的 Window 类的名称(然后将您的 Window.java 文件更改为您选择的新名称 / 以及您尝试使用 Window 的其他任何地方),它应该可以正常工作。


推荐阅读