2012-07-09 45 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>