На самом деле сообщение самоочевидно: 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");
}
}