2012-07-09 60 views
6

我正在嘗試使用Google的Guava庫的EventBus。Guava java EventBus實例化錯誤

從番石榴的documentation應該很容易實例化一個EventBus對象。

我的代碼:

package test; 

import com.google.common.eventbus.EventBus; 

public class Test { 
    public static void main(String[] args) { 
     EventBus bus = new EventBus("Sample"); 
    } 
} 

我得到這個錯誤:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Objects.firstNonNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 
at com.google.common.cache.CacheBuilder.getKeyStrength(CacheBuilder.java:355) 
at com.google.common.cache.CustomConcurrentHashMap.<init>(CustomConcurrentHashMap.java:206) 
at com.google.common.cache.ComputingCache.<init>(ComputingCache.java:39) 
at com.google.common.cache.CacheBuilder.build(CacheBuilder.java:569) 
at com.google.common.eventbus.EventBus.<init>(EventBus.java:156) 
at test.Test.main(Test.java:7) 
Java Result: 1 

我和番石榴10.0,11.0和12.0,總是同樣的錯誤嘗試。我在OSX Lion上使用Netbeans 7.1:我已經嘗試了Java 6(32和64位)和Java 7:沒有任何改進。在谷歌我找不到任何東西。這是番石榴的問題嗎?或者像往常一樣,我錯過了什麼?

最好的問候,

亞歷山德羅

+3

乍一看,這看起來像一個錯誤,當您有不同的版本在classpath的同一個JAR文件,通常你得到的。 – biziclop 2012-07-09 16:58:18

+0

我剛剛嘗試在Windows上使用相同的設置,它工作正常。我會試着看看我是否有不同版本的同一個罐子。我會讓你知道 – Alejander 2012-07-09 17:14:55

+3

嘗試'-verbose:class'命令行選項來查看你的類實際從哪裏加載。 – biziclop 2012-07-09 17:46:57

回答

17

要展開什麼@biziclop說,你很可能有番石榴之前3.0既是一個最新版本,而且無論是谷歌,收集或番石榴的版本在classpath 。 Objects.firstNonNull在3.0中添加,表明該類的舊版本正在加載。

+1

感謝在這個答案中提及google-collections - 這是我的問題。在pom中排除它就是個訣竅。 – Ryan 2012-11-16 19:32:15

+0

我有2個番石榴版本,它給了我Objects.firstNonNull錯誤:找不到符號。刪除其中一個修復了錯誤。 – 2017-05-24 05:56:10

2

我有同樣的問題。我使用的是google-collections 1.0,其中番石榴是v11。這個問題消失後,我升級到

<!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency>

<dependency> 
    <groupId>com.google.collections</groupId> 
    <artifactId>google-collections</artifactId> 
    <version>1.0</version> 
</dependency>