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