WindowAdapter和WindowDestroyer发生Java错误

时间:2018-12-10 02:42:27

标签: java java-8 javac windowlistener

我只是从Java开始,并尝试使用一些在网上找到的示例代码来入门,但是由于某些原因,我无法编译此代码。我在Ubuntu 16.04上安装了“ default-jdk”。

代码如下:

import java.awt.*;
import java.awt.event.WindowListener;
import javax.swing.*;
import java.io.*; 


public class Test extends JFrame{
public static void main (String argv []) 
{
    new Test("Window Application");
}

public Test(String title) 
{
    super(title);
    setSize(200, 100);
    addWindowListener((WindowListener) new WindowDestroyer());                 
    setVisible(true);
}

private class WindowDestroyer extends WindowAdapter 
{      
    public void windowClosing(WindowEvent e) 
    {    
        System.exit(0);  
    }                                                             
}

}

当我尝试执行javac Test.java时,得到2个找不到符号错误。

私有类WindowDestroyer扩展了WindowAdapter

public void windowClosing(WindowEvent e)

2 个答案:

答案 0 :(得分:0)

Java 8 docs for WindowAdapter中,它被定义为java.awt.event.WindowAdapter

您需要先导入该类:

import java.awt.event.WindowAdapter;

除了您的其他进口商品。

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowListener;

作为旁注,您可能会想这样做

import java.awt.event.*;

避免以后出现类似的导入错误。

我建议您阅读Why is using a wild card with a Java import statement bad?上的讨论,以了解这样做的利弊。

答案 1 :(得分:0)

我可以看到,您创建了简单的Swing应用程序窗口并关闭了它的关闭窗口。您以错误的方式进行操作。最好使用setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)(仅当您不打算做特殊的东西时才使用)。并使用SwingUtilities.invokeLater()在AWT事件分配线程上异步执行:

public class Test extends JFrame {

    public static void main(String... ars) {
        SwingUtilities.invokeLater(() -> new Test().setVisible(true));
    }

    public Test() {
        super("Window Application");
        setSize(200, 100);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
     }
}