English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java에서 IllegalComponentStateException 예외를 처리하는 방법

이는 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를 전달하거나 완전히 제거하여 이 예외를 해결할 수 있습니다.

당신이 좋아할 만한 것