测试游戏时,我有时会在组件不可显示时抛出异常。我在 isDisplayable() 上添加了一个等待循环。
似乎我的游戏可能需要几百毫秒。变得可显示。
这是处理这个问题的明智方法吗?
我正在测试通过套接字与服务器通信的游戏客户端。
谢谢
编辑1:感谢您的评论。我发现在 gui 完成其构造和初始化之前,我正在将 gui(观察者)的中介添加到模型(可观察者)中。情况变得更糟,因为我正在初始化一个调用 createImage 的面板,它返回 null 并抛出。
import java.awt.*;
import javax.swing.*;
public class WaitForFrameToBeVisible {
JFrame frame=new JFrame("FrameDemo");
private void createAndShowGUI() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel emptyLabel=new JLabel("");
emptyLabel.setPreferredSize(new Dimension(175,100));
frame.getContentPane().add(emptyLabel,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
void run() throws Exception {
System.out.println("waiting for frame to be displayable");
long t0=System.nanoTime();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
while (!frame.isDisplayable())
Thread.sleep(1);
long dt=System.nanoTime()-t0;
System.out.println("waited "+dt/1_000_000.+" ms. for frame to be displayable");
}
public static void main(String[] args) throws Exception {
new WaitForFrameToBeVisible().run();
}
}