сериализуемый LookAndFeel - ClassCastException - PullRequest
0 голосов
/ 14 августа 2011

Мне нужно сериализовать копию интерфейса LookAndFeel в файл. В результате я написал следующий код:

public class SerializableLookAndFeel extend LookAndFeel implement Serializable {
    public String getID() {
        return "";
    }
    public String getDescription() {
        return "";
    }
    public String getName() {
        return "";
    }
    public boolean isSupportedLookAndFeel() {
        return false;
    }
    public boolean isNativeLookAndFeel() {
        return false;
    }
}

Пока я получаю

Исключение в потоке "main" java.lang.ClassCastException: javax.swing.plaf.metal.MetalLookAndFeel не может быть приведен к test.SerializableLookAndFeel

Я пытался расширить MetalLookAndFeel, но во время выполнения я получаю ClassCastException.

Как мне в любом случае выполнить сериализацию LookAndFeel в файл?

Ответы [ 3 ]

1 голос
/ 14 августа 2011

Во-первых, я предполагаю, что это опечатка, а вы имели в виду extends, а не extend. Класс LookAndFeel имеет 2 прямых известных подкласса BasicLookAndFeel и MultiLookAndFeel.

Ваше исключение говорит о том, что вы пытаетесь привести MetalLookAndFeel к вашему SerializableLookAndFeel. Ваш SerializableLookAndFeel расширяет LookAndFeel, в то время как MetalLookAndFeel расширяет BasicLookAndFeel. Фактически вы пытаетесь назначить ребенка одного из братьев и сестер в свой класс, что не сработает.

Попробуйте расширить BasicLookAndFeel, если проблема не устранена, попробуйте опубликовать свой тестовый код.

1 голос
/ 14 августа 2011

Вы делаете странные вещи. Ваш SerializableLookAndFeel является (своего рода) братом MetalLookAndFeel, поэтому актерский состав просто не может работать.

MetalLookAndFeel расширяет BasicLookAndFeel, что расширяет LookAndFeel и реализует Serializable, поэтому нет смысла добавлять Serializable снова.

А как насчет того, чтобы просто сериализовать его как есть? Что происходит?

Вам действительно нужно сериализовать внешний вид? Не будет ли просто сохранить его имя (или что-то еще)?

1 голос
/ 14 августа 2011

1) просто опечатки :-) не extend LookAndFeel, но extends LookAndFeel

2) не очень хорошая идея, чтобы Установите Look & Feel в качестве параметров, убедитесь, что ваши L & F изменения должныбыть:

try {
   UIManager.setLookAndFeel(laf[index].getClassName());
   SwingUtilities.updateComponentTreeUI(frame);
   //or SwingUtilities.windowForComponent(myComponent)
} catch (Exception exc) {
   exc.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...