Java 如何用guice注入资源

Java 如何用guice注入资源,java,resources,guice,Java,Resources,Guice,我有一个类,由guice注入,这个类构造函数调用super,资源由class.getResource(..)加载 它在测试中运行良好,但在GUI初始化期间,CleanAction.class.getResource(“icons/table.png”)的结果为null,因此它会因NullPointerException而失败 有没有guice方法来注入资源?为什么需要guice来注入资源?在正常工作期间,文件似乎不在类路径中。它仅在测试期间位于类路径中。在正常运行类路径时,也尝试将其添加到类路径

我有一个类,由guice注入,这个类构造函数调用super,资源由class.getResource(..)加载

它在测试中运行良好,但在GUI初始化期间,CleanAction.class.getResource(“icons/table.png”)的结果为null,因此它会因NullPointerException而失败


有没有guice方法来注入资源?

为什么需要guice来注入资源?在正常工作期间,文件似乎不在类路径中。它仅在测试期间位于类路径中。在正常运行类路径时,也尝试将其添加到类路径中,而不是用于测试

你在用maven吗?也许您的文件在
src/test/resources
中,而它应该在
src/main/resources
中?

要回答您的问题“有没有注入资源的方法?”,我会说“没有,不是现成的”

但是,我在框架(Apache许可证2.0)中实现了一个基于Guice的
ResourceInjector
服务。请随意看一看,看看我是如何使用Guice特性来确保资源可以在Guice注入时注入的

这比您所描述的更一般(在“参考资料”中,我包括
JLabel
JButton
…)的文本)


但是,请注意,自动资源注入是一项复杂的业务(许多不同类型的资源…

),因此我假设您运行它的方式中一定有某种东西。看起来类路径中不包括
src/main/resources
。你是怎么运作的?你是在用maven构建.jar,然后运行这个.jar吗?是的。这个问题以一种奇怪的方式得到了解决——我删除了参考资料中的所有子文件夹,只要求提供名为“image.png”的资源
@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;
    }

...
}