gpt4 book ai didi

java - 加载另一个方法时 GUI 组件不会加载

转载 作者:行者123 更新时间:2023-12-01 11:12:04 28 4
gpt4 key购买 nike

我正在开发一款使用自定义控制台风格 GUI 来玩的游戏。我之前问过一个问题来找出导致 NullPointerException 的原因。请参阅this link上下文。

我现在已经消除了错误,但有一个新问题:当我开始游戏时,GUI 仅加载 JFrame(编辑:JPanel 不是 JFrame),但不加载其他组件。在原来的帖子中,GUI 组件正常加载,但启动游戏本身会导致 NullPointerException,因为在 GUI 调度线程完成之前调用了 JTextArea。

这是当前代码:

经典.java

import javax.swing.*;
import java.util.*;
import static javax.swing.SwingUtilities.invokeLater;
public class Classic extends Game{
private static JFrame gui;
private static GUIClassic newContentPane;
...
public void play() {
invokeLater(Classic::startGUI);
invokeLater(Classic::startGame);
}
public static void startGame() {
//Game processes
...
}
private static void startGUI() {
gui = new JFrame("Karma :: Classic Mode");
gui.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
newContentPane = new GUIClassic();
newContentPane.setOpaque(true);
gui.setContentPane(newContentPane);
gui.pack();
gui.setVisible(true);
}
...
}

GUIClassic.java

...
public class GUIClassic extends JPanel implements ActionListener {
private JTextArea output;
private JTextField input;
private boolean inputReady;
private String inputText;
public GUIClassic() {
super();
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
output = new JTextArea(15, 15);
output.setEditable(false);
JScrollPane outputScroll = new JScrollPane(output);
input = new JTextField("",40);
add(outputScroll);
add(Box.createRigidArea(new Dimension(0,5)));
add(input);
}
}

在 Classic.java 的 play() 方法中,我尝试删除 invokeLater(...) 方法,但得到了相同的结果。

public void play() {
startGUI();
startGame();
}

我还尝试将调用移至 startGUI 内的 startGame:

public static void startGUI() {
...
startGame();
}

但是,完全删除 startGame 可以让它正常启动:

public void play() {
invokeLater(Classic::startGUI);
}

我完全不知所措。我不明白为什么在不玩游戏的情况下加载GUI可以正常加载,但是开始游戏突然会使组件消失。

请注意:运行时不会抛出异常。

顺便说一句,GUI 也不允许我在当前版本中通过 [X] 按钮关闭它,但在仅调用“startGUI”的情况下,组件会弹出并 [X]允许您退出。

最佳答案

尝试在新线程中调用startGame(),因为所有绘画工作都是在主线程中完成的

  new Thread(new Runnable() {

@Override
public void run() {
Classic.startGame();
}
}).start();

关于java - 加载另一个方法时 GUI 组件不会加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32230270/

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