我想創建一個測試類來打開一個JFrame。爲了阻止窗口關閉主線程完成的時刻,我添加了代碼以在另一個線程中打開窗口。我每次運行該應用程序我得到以下異常:嘗試在另一個線程中打開JFrame時,java.lang.ExceptionInInitializerError錯誤的原因和解決方法是什麼?
Exception in thread "Test Thread" java.lang.ExceptionInInitializerError at java.lang.Runtime.addShutdownHook(Runtime.java:192) at java.util.logging.LogManager.(LogManager.java:237) at java.util.logging.LogManager$1.run(LogManager.java:177) at java.security.AccessController.doPrivileged(Native Method) at java.util.logging.LogManager.(LogManager.java:158) at java.util.logging.Logger.getLogger(Logger.java:273) at java.awt.Component.(Component.java:173) at reflector.ApplicationRunner.startObjectsPool(ApplicationRunner.java:18) at reflector.ReflectorEndToEndTest$1.run(ReflectorEndToEndTest.java:20) Caused by: java.lang.IllegalStateException: Shutdown in progress at java.lang.Shutdown.add(Shutdown.java:62) at java.lang.ApplicationShutdownHooks.(ApplicationShutdownHooks.java:21) ... 9 more
的代碼如下:
@Test
public void createIntegerClass() throws Exception {
Thread t = new Thread("Test Thread") {
@Override
public void run() {
try {
application.startObjectsPool();
} catch (Exception e) {
e.printStackTrace();
}
}
};
t.start();
t.setDaemon(true);
}
public class ApplicationRunner {
public final static String[] NO_ARGS = null;
public void startObjectsPool() throws Exception {
ObjectsPoolFrame frame = new ObjectsPoolFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
public ObjectsPoolFrame() {
setTitle("Objects Pool");
// get screen dimension
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
// center frame in screen
setSize(screenWidth/2, screenHeight/2);
setLocation(screenWidth/4, screenHeight/4);
op = new ObjectPool();
// add buttons on the top
j1 = new JButton("Create Object");
j2 = new JButton("Delete Object");
j3 = new JButton("Display Methods");
j4 = new JButton("Invoke Method");
JPanel buttonPanel = new JPanel();
buttonPanel.add(j1);
buttonPanel.add(j2);
buttonPanel.add(j3);
buttonPanel.add(j4);
add(buttonPanel, BorderLayout.NORTH);
j1.addActionListener(new CreateObjectAction());
j2.addActionListener(new DeleteObjectAction());
j3.addActionListener(new DisplayMethodAction());
j4.addActionListener(new InvokeMethodAction());
comboBox = new JComboBox();
comboBox.addActionListener(new ComboBoxClearAction());
addComboBoxItem();
comboBox2 = new JComboBox();
JPanel comboPanel = new JPanel();
comboPanel.add(new JLabel("Objects"));
comboPanel.add(comboBox);
comboPanel.add(new JLabel("Methods"));
comboPanel.add(comboBox2);
add(comboPanel, BorderLayout.CENTER);
displayMessage = new JLabel();
JPanel displayPanel = new JPanel();
displayPanel.add(displayMessage);
add(displayPanel, BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
我想不通爲什麼,我發現了問題。
重新格式化的代碼;如果不正確請回復。 – trashgod 2011-01-08 02:55:07