2010-09-08 31 views
3

我有一個類,由吉斯注入這個類的構造函數調用超級,與資源由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。

有什麼方法可以注入資源嗎?

回答

2

要回答你的問題「是否有任何吉斯方式注入資源?」,我會說:「不,不是開箱即用」。

但是,我已經在基於Guice的Guts-GUI框架(Apache許可證2.0)中實施了一個ResourceInjector服務。隨意看看,看看如何我用Guice的功能,以確保資源能夠在吉斯注射時間注入。

這比你的描述更具通用性(在「資源」包括我文字JLabelJButton ...)但是

請注意的是,自動資源注入是一個複雜的業務(許多不同的類型資源...)

+0

感謝的好膽量的項目,這似乎是罰款。 – 2010-09-13 08:04:52

1

爲什麼你需要guice來注入資源?看起來你的文件在正常工作中不在classpath中。它僅在測試期間纔在classpath中。嘗試將它添加到類路徑中,當它正常運行時,而不是測試。

你使用Maven?也許你有你的文件在src/test/resources,而它應該在src/main/resources

+0

的它在src /主/資源 – 2010-09-08 09:54:27

+0

所以我認爲一定有什麼東西在你正在運行的方式。看起來'src/main/resources'沒有包含在classpath中。你如何運行它?你是由maven構建.jar,然後運行這個.jar? – amorfis 2010-09-08 10:05:28

+0

是的。問題解決了在陌生的路上 - 我已經刪除了所有的資源和子文件夾只要求命名的資源,比如「image.png」 – 2010-09-08 12:17:43