我已經在JFrame窗口中編寫了一個應用程序,並且想要在需要時彈出錯誤消息。但是,當我調用「JOptionPane.showMessageDialog()」時,應用程序凍結,唯一的方法就是使用任務管理器。 這裏是我的代碼下調版本:爲什麼我的應用程序在JFrame頂部顯示JOptionPane時會凍結?
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;
}
}
有誰知道爲什麼它可能會那麼做嗎?
您是否在應用程序中使用併發?你可以測試你的代碼,只留下'新的JFrame(...),setVisible,showMessageDialog',看看它是否工作呢? – pajton 2011-03-31 17:30:01
@pajton:那有效。嗯..讓我們來看看如果我一個一個地啓用所有的東西會發生什麼 – Bartvbl 2011-03-31 17:36:53
那麼,這只是調試問題的技巧:現在您可以開始逐個添加代碼並查看哪一段代碼會導致問題。 – pajton 2011-03-31 17:39:53