English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이는 IllegalStateException의 서브클래스로, AWT 컴포넌트가 적절한 상태가 아니라는 것을 의미합니다. 즉, 컴포넌트를 사용하고 있지만 올바르지 않게 사용하면 이 예외가 발생합니다. 여러 가지 상황에서 이 예외가 발생할 수 있습니다.
아래의 예제에서는 창의可见성을 true로 설정한 후 이곳에서 예제 로그인 양식을 구축하려고 시도했으며, 위치를 플랫폼에 따라 설정하려고 했지만 이는 적절하지 않습니다.
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LoginDemo extends JFrame implements ActionListener { JPanel panel; JLabel user_label, password_label, message; JTextField userName_text; JPasswordField password_text; JButton submit, cancel; LoginDemo() { // Username Label user_label = new JLabel(); user_label.setText("User Name :"); userName_text = new JTextField(); // Password Label password_label = new JLabel(); password_label.setText("Password :"); password_text = new JPasswordField(); // Submit submit = new JButton("SUBMIT"); panel = new JPanel(new GridLayout(3, 1)); panel.add(user_label); panel.add(userName_text); panel.add(password_label); panel.add(password_text); message = new JLabel(); panel.add(message); panel.add(submit); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //將監聽器添加到組件中。 submit.addActionListener(this); add(panel, BorderLayout.CENTER); setTitle("Please Login Here !"); setLocationRelativeTo(null); setSize(375,250); setVisible(true); setLocationByPlatform(true); } public static void main(String[] args) { new LoginDemo(); } @Override public void actionPerformed(ActionEvent ae) { String userName = userName_text.getText(); char[] password = password_text.getPassword(); if (userName.trim().equals("admin") && new String(password).trim().equals("admin")) { message.setText(" Hello " + userName + " } message.setText(" Invalid user.. "); } } }
출력 결과
thread "main"에서 예외 발생 java.awt.IllegalComponentStateException: The window is showing on screen. at java.awt.Window.setLocationByPlatform(Unknown Source) at myPackage.LoginDemo.<init>(LoginDemo.java:51) at myPackage.LoginDemo.main(LoginDemo.java:55)
이 경우, setLocationByPlatform()에 false를 전달하거나 완전히 제거하여 이 예외를 해결할 수 있습니다.