【发布时间】:2016-12-31 00:40:32
【问题描述】:
我在 JFrame 窗口中编写了一个应用程序,如果需要,我希望弹出错误消息。但是,当我调用“JOptionPane.showMessageDialog()”时,应用程序会冻结,停止它的唯一方法是使用任务管理器。 这是我的代码的精简版:
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.concurrent.atomic.AtomicReference;
import javax.swing.JFrame;
public class GameMain {
public JFrame jframe;
public Canvas canvas;
private AtomicReference<Dimension> canvasSize = new AtomicReference<Dimension>();
public void initialize(int width, int height) {
try {
Canvas canvas = new Canvas();
JFrame frame = new JFrame("testapp");
this.canvas = canvas;
this.jframe = frame;
ComponentAdapter adapter = new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
resize();
}
};
canvas.addComponentListener(adapter);
canvas.setIgnoreRepaint(true);
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(canvas);
frame.setVisible(true);
Dimension dim = this.canvas.getSize();
} catch (LWJGLException le) {
le.printStackTrace();
}
JOptionPane.showMessageDialog(null, "oops!");
}
public void resize()
{
Dimension dim = this.canvas.getSize();
canvasSize.set(dim);
dim = null;
}
}
有人知道为什么会这样吗?
【问题讨论】:
-
你在你的应用中使用并发吗?您可以只留下
new JFrame(...), setVisible, showMessageDialog来测试您的代码,然后看看它是否有效? -
@pajton:行得通。嗯..让我们看看如果我一个一个启用一切会发生什么
-
嗯,这只是调试问题的技巧:现在您可以开始逐段添加代码,看看是哪段代码导致了问题。
-
@pajton:问题原来是 JFrame 中的 openGL 上下文。我已经尝试了很长时间,但是没有办法让错误消息与框架同时出现,同时保持响应。我可能必须找到某种解决方法,但无论如何感谢您的帮助!
-
很高兴您找到了导致问题的原因!不过,如果您需要帮助,您可以发布另一个更详细的问题:)。