Java中处理IllegalComponentStateException异常
它是IllegalStateException的子类,这表明AWT组件没有处于适当的状态,也就是说,如果您正在使用组件,但是没有正确使用它们会导致此异常。有几种情况会发生此异常
示例
在下面的示例中,我们尝试在将窗口的可见性设置为true之后在此处构建一个示例登录表单,我们尝试将位置按平台设置为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 + ""); } else { message.setText(" Invalid user.. "); } } }
输出结果
Exception in 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)
解决方法
在这种情况下,您可以通过将false传递给setLocationByPlatform()或完全删除它来解决该异常。