java.lang.ClassCastException;没有使用TreeSet <itemstack>的堆栈跟踪

时间:2016-12-02 16:50:31

标签: java plugins minecraft bukkit

我定义了这个方法:

public static TreeSet<ItemStack> getItems() {
    TreeSet<ItemStack> things = new TreeSet<>();
    things.add(new ItemStack(Material.ACACIA_DOOR));
    return things;
}

我也尝试在TreeSet中放置多个东西,它也不起作用。

现在我有了这个代码部分:

TreeSet<ItemStack> things = getItems();

如果我这样做,没有任何反应。如果我用try / catch包围它,似乎抛出异常。 但是,如果我打印出错误:

} catch (Exception exc) {
    System.out.println("Catched an exception:")
    exc.printStackTrace();
    System.out.println(exc.getMessage());
    System.out.println(exc);
}

没有任何错误/ Stacktrace即将发生。它只是说:

[INFO]: Catched an exception:
[WARN]: java.lang.ClassCastException
[INFO]: null
[INFO]: java.lang.ClassCastException

那么错误是什么,我如何防止它,为什么我通过使用ItemSets将带有ItemSet的TreeSet强制转换为TreeSet来获得它?

2 个答案:

答案 0 :(得分:1)

您可以做些什么来解决您的情况,从而保证您的预期行为是使用普通列表而不是TreeSet来存储您的项目:

@Override
protected void onPause() {
    super.onPause();
    camera.stopPreview();
    camera.release();
    //camera = null;  //this give me a null object message
}

@Override
protected void onResume() {
    super.onResume();
    camera = Camera.open(cameraId);
    setCameraDisplayOrientation();
    startCameraPreview(surfaceHolder, surfaceView.getWidth(), surfaceView.getHeight());
}

通过这种方式,您可以解决问题。如果你想在你的物品上使用某个ordain,那么应该使用Treeset,并且无法正常订购ItemStack。

答案 1 :(得分:0)

Read the Javadoc

即使您不知道自己在寻找什么,也请点击Ctrl-f,然后在页面中查找ClassCastException。在您正在使用的构造函数的文档TreeSet()中,您将找到:

  

插入集合中的所有元素都必须实现Comparable接口。 ...如果用户尝试向该组添加违反此约束的元素...,则添加调用将抛出ClassCastException

所以,要么:

  • 制作ItemStack工具Comparable<ItemStack>
  • Comparator<ItemStack>
  • 的构造函数提供TreeSet