gpt4 book ai didi

java - Mac 上不显示图形

转载 作者:行者123 更新时间:2023-12-02 12:23:43 25 4
gpt4 key购买 nike

我正在开发一个独立游戏项目,当我将项目从 Windows 计算机移动到 MacBook 时,我遇到了图形无法显示的问题。我已经更新了我的 Java 版本和 Eclipse,但仍然遇到这个问题。以下是处理 JFrame 和 Panel 的两个主要文件:

主游戏循环

package hara;

import javax.swing.JFrame;

public class MainGameLoop {

public static final String gameName = "HARA v0.0";

public static void main(String[] args) {
JFrame f = new JFrame(gameName);
f.setContentPane(new MainWindow());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(false);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}

和主窗口

package hara;

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 javax.swing.JPanel;

import hara.gamestate.GameStateManager;

public class MainWindow extends JPanel implements Runnable, KeyListener{
public static final int WIDTH = 320;
public static final int HEIGHT = 240;
public static double wSCALE = 4;
public static double hSCALE = 4;

private Thread thread;
private boolean running;
private int FPS = 60;
private long targetTime = 1000/FPS;

private BufferedImage image;
private Graphics2D g;

private GameStateManager gsm;

public MainWindow(){
super();
setPreferredSize(new Dimension((int)(WIDTH * wSCALE), (int)(HEIGHT * hSCALE)));
setFocusable(true);
requestFocus();
}

public void addNotify(){
super.addNotify();
if(thread == null){
thread = new Thread(this);
addKeyListener(this);
thread.start();
}
}

public void init(){
image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);

g = (Graphics2D) image.getGraphics();

running = true;

gsm = new GameStateManager();
gsm.setState(gsm.MENUSTATE);
}

public void run(){

init();

long start;
long elapsed;
long wait;

while(running){
start = System.nanoTime();

update();
draw();
drawToScreen();

elapsed = System.nanoTime() - start;

wait = targetTime - elapsed / 1000000;
if(wait < 0){
wait = 5;
}

try {
Thread.sleep(wait);
}catch(Exception e){
e.printStackTrace();
}

}

}

private void update(){
gsm.update();
}

private void draw(){
gsm.draw(g);
}

private void drawToScreen(){
Graphics g2 = getGraphics();
g2.drawImage(image, 0, 0, (int) (WIDTH * wSCALE), (int) (HEIGHT * hSCALE), null);
g2.dispose();
}

public void keyTyped(KeyEvent e) {}

public void keyPressed(KeyEvent key) {
gsm.keyPressed(key.getKeyCode());
}

public void keyReleased(KeyEvent key) {
gsm.keyReleased(key.getKeyCode());
}
}

它在我的 PC 上完美运行,绘图没有任何问题,但是当我将文件移动到我的 Macbook 上时,它只是打开一个空白的 JFrame,什么也不做。我测试了这些方法是否被正确调用,结果确实如此。调用绘制方法,键盘输入有效,但没有显示任何内容。如果我将窗口设置为可调整大小,并调整其大小,我可以非常简单地看到图形的工作情况。我尝试了很多解决方案,但没有一个有效。我浏览了这个网站上的很多问题,但似乎没有什么对我有用。会喜欢任何想法。谢谢!

最佳答案

不要使用 getGraphics() 进行绘画。

相反,自定义绘制是通过重写 JPanelpaintComponent() 方法来完成的。阅读 Swing 教程中关于 Custom Painting 的部分了解更多信息和工作示例。

当您因为面板的属性发生更改而想要重新绘制组件时,您可以在面板上调用 repaint() 。因此,摆脱 update() 方法并简单地调用 repaint() 来绘制面板。

关于java - Mac 上不显示图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com