незарегистрированное исключение java.lang.ClassNotFoundException; должен быть пойман или объявлен брошенным - PullRequest
1 голос
/ 30 января 2010

У меня есть следующий простой код:

package test;

import javax.swing.*;

class KeyEventDemo {
    static void main(String[] args) {
    UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
    } 
}

Генерирует следующее сообщение об ошибке:

KeyEventDemo.java:7: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
    UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                            ^
1 error

Кто-нибудь знает, что не так?

Ответы [ 2 ]

9 голосов
/ 30 января 2010

На самом деле сообщение самоочевидно: UIManager.setLookAndFeel выдает проверенных исключений, которые, таким образом, должны быть перехвачены (с помощью блока try / catch) или объявлены как Брошенный (в вызывающем методе).

Так что либо окружите вызов попыткой / уловом:

public class KeyEventDemo {
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        } catch ( ClassNotFoundException e ) {
            // TODO handle me
        } catch ( InstantiationException e ) {
            // TODO handle me
        } catch ( IllegalAccessException e ) {
            // TODO handle me
        } catch ( UnsupportedLookAndFeelException e ) {
            // TODO handle me
        }
    }
}

Или добавить объявление броска:

public class KeyEventDemo {
    public static void main(String[] args) throws ClassNotFoundException, 
        InstantiationException, IllegalAccessException, 
        UnsupportedLookAndFeelException {
        UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
    }
} 

Если вы не хотите обрабатывать каждый из них определенным образом, это можно сделать менее многословным, используя супертип Exception:

public class KeyEventDemo {
    static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        } catch (Exception e) {
            // TODO handle me
        }
    }
} 

Или с помощью объявления throws (обратите внимание, что это передает меньше информации вызывающей стороне метода, но вызывающей здесь является JVM, в данном случае это не имеет большого значения):

class KeyEventDemo {
    static void main(String[] args) throws Exception {
        UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
    }
} 
4 голосов
/ 30 января 2010

Переопределите ваш метод, чтобы он стал

public static void main(String[] args) throws Exception {
...