1

我在将 a 添加HashMap<String,String>到 a 时遇到以下问题TreeSet<HashMap<String,String>>。代码如下:

... Do something
XMLRoot root = XMLRoot
.newBuild()
.setTrx(
    Tag
    .newBuild()
    .setName("trx")
    .addAttribute("type", "04/01")
    .addAttribute("id", id));
... => BreakPoint here!

现在该方法的addAttribute()作用是:

public Tag addAttribute(String name, String value) {
    // Create the attribute.
    HashMap<String, String> att = new HashMap<String, String>();
    att.put(name, value);

    attributes.add(att);
    return this;
}

attributes变量是类型的集合TreeSet<HashMap<String,String>>。现在使用 Netbeans 调试器,我在创建 XMLRoot 对象后立即添加了一个 BreakPoint,我发现它永远不会到达断点。问题是没有抛出异常,没有错误,什么都没有。另一个奇怪的事情是,如果我使用该addAttribute()方法只添加一个元素,那么一切正常。

问题:什么可能导致执行在 TreeSet 类的第二个元素的 add() 方法内终止......?

注意:使用调试器我设法看到第一个属性被设置,但我从未到达第二个属性,这意味着在添加第二个元素时执行突然结束。

详细信息: Apple JDK 1.6.0_51 64-Bit OSX 10.8.4 (Mountain Lion)

4

1 回答 1

1

你几乎肯定会得到一个ClassCastException,因为 的元素TreeSet必须实现ComparableHashMap没有。老实说,我很惊讶编译器允许这样做;我认为TreeSet它的参数化会更明确。

你说你在事件调度线程上运行它。EDT 有一个未捕获的异常处理程序,通常会在 StdErr 上打印异常,但在其他情况下会忽略它们。如果您没有看到消息,则该处理程序可能已被您的应用程序替换。

于 2013-08-21T19:24:07.783 回答