Ошибка Java с WindowAdapter и WindowDestroyer - PullRequest
0 голосов
/ 10 декабря 2018

Я только начинаю в 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

публичный void windowClosing (WindowEvent e)

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Я вижу, что вы создаете простое окно приложения 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);
     }
}
0 голосов
/ 10 декабря 2018

Из Java 8 документов для 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.*;

, чтобы избежать подобных ошибок импорта в будущем.

Предлагаю прочитать обсуждения по Почему использование подстановочного знака с оператором импорта Java плохо? , чтобы иметь представление о плюсах и минусах этого.

...