我有一个类,由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”)的结果为null,因此它因NullPointerException而失败。
有没有任何guice方式来注入资源?
答案 0 :(得分:2)
要回答你的问题“有没有任何guice方式来注入资源?”,我会说“不,不是开箱即用”。
但是,我已经在Guts-GUI框架(Apache License 2.0)中基于Guice实现了一项ResourceInjector
服务。请随意查看它,看看我如何使用Guice功能确保在Guice注入时注入资源。
这比你描述的更为通用(在“资源”中我包含JLabel
的文字,JButton
...)
但请注意,自动资源注入是一项复杂的业务(许多不同类型的资源......)
答案 1 :(得分:1)
为什么需要guice来注入资源?在正常工作期间,您的文件看起来不在类路径中。它只在测试期间在类路径中。当你正常运行时,尝试将它添加到类路径,而不是测试。
你正在使用maven吗?也许你的文件在src/test/resources
,而它应该在src/main/resources
?