как внедрить ресурс с хитростью - PullRequest
4 голосов
/ 08 сентября 2010

У меня есть класс, внедряемый guice, и этот конструктор класса вызывает super с ресурсом, загруженным class.getResource (..)

@SuppressWarnings("serial")
public class CleanAction extends AbstractAction {

    private final JTable table;
    private final PowderTableModel tableModel;

    @Inject
    public CleanAction(@Named("data") JTable table, PowderTableModel tableModel) {
        super("Clean", new ImageIcon(CleanAction.class.getResource("/icons/table.png")));
        this.table = table;
        this.tableModel = tableModel;
    }

...
}

Он отлично работает в тестах, но во время инициализации guice результат CleanAction.class.getResource ("icons / table.png") равен нулю, поэтому он завершается с NullPointerException

Есть ли какой-нибудь хитрый способ залить ресурсы?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2010

Чтобы ответить на ваш вопрос «Есть ли какой-нибудь хитрый способ закачать ресурсы?», Я бы сказал «нет, не из коробки».

Однако я внедрил один сервис ResourceInjector, основанный на Guice, в Guts-GUI framework (Apache License 2.0).Не стесняйтесь взглянуть на это и посмотреть, как я использовал функции Guice, чтобы гарантировать, что ресурсы могут быть введены во время внедрения Guice.

Это гораздо более общее, чем то, что вы описываете (в «ресурсы» я включаютекст для JLabel, JButton ...)

Обратите внимание, однако, что автоматическое внедрение ресурсов - сложный бизнес (много разных типов ресурсов ...)

1 голос
/ 08 сентября 2010

Зачем вам нужно, чтобы вводить ресурсы?Похоже, ваш файл не в classpath во время нормальной работы.Это в classpath только во время тестов.Попробуйте добавить его в classpath также, когда вы запускаете его нормально, а не для тестов.

Вы используете Maven?Может быть, у вас есть файл в src/test/resources, а в src/main/resources?

...