GVKun编程网logo

为什么生成javadocs时会出现ClassCastException?(为什么java生成不了class文件)

7

如果您想了解为什么生成javadocs时会出现ClassCastException?的相关知识,那么本文是一篇不可错过的文章,我们将对为什么java生成不了class文件进行全面详尽的解释,并且为您提

如果您想了解为什么生成javadocs时会出现ClassCastException?的相关知识,那么本文是一篇不可错过的文章,我们将对为什么java生成不了class文件进行全面详尽的解释,并且为您提供关于Caused by: java.lang.ClassCastException、Caused by: java.lang.ClassCastException: class java.lang.Double cannot be cast to class org.apach...、ClassCastException:: cannot be cast to class java.lang.Comparable的处理方法、Exception in thread "main" java.lang.ClassCastException的有价值的信息。

本文目录一览:

为什么生成javadocs时会出现ClassCastException?(为什么java生成不了class文件)

为什么生成javadocs时会出现ClassCastException?(为什么java生成不了class文件)

我正在使用ant生成javadocs,但是一遍又一遍地获取此异常-为什么?

我正在使用JDK 1.6.0_06 版本。

[javadoc] java.lang.ClassCastException: com.sun.tools.javadoc.ClassDocImpl cannot be cast to com.sun.javadoc.AnnotationTypeDoc  [javadoc]     at com.sun.tools.javadoc.AnnotationDescImpl.annotationType(AnnotationDescImpl.java:46)  [javadoc]     at com.sun.tools.doclets.formats.html.HtmlDocletWriter.getAnnotations(HtmlDocletWriter.java:1739)  [javadoc]     at com.sun.tools.doclets.formats.html.HtmlDocletWriter.writeAnnotationInfo(HtmlDocletWriter.java:1713)  [javadoc]     at com.sun.tools.doclets.formats.html.HtmlDocletWriter.writeAnnotationInfo(HtmlDocletWriter.java:1702)  [javadoc]     at com.sun.tools.doclets.formats.html.HtmlDocletWriter.writeAnnotationInfo(HtmlDocletWriter.java:1681)  [javadoc]     at com.sun.tools.doclets.formats.html.FieldWriterImpl.writeSignature(FieldWriterImpl.java:130)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.buildSignature(FieldBuilder.java:184)  [javadoc]     at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)  [javadoc]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  [javadoc]     at java.lang.reflect.Method.invoke(Method.java:597)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.invokeMethod(FieldBuilder.java:114)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.AbstractMemberBuilder.build(AbstractMemberBuilder.java:56)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.buildFieldDoc(FieldBuilder.java:158)  [javadoc]     at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)  [javadoc]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  [javadoc]     at java.lang.reflect.Method.invoke(Method.java:597)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.invokeMethod(FieldBuilder.java:114)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.AbstractMemberBuilder.build(AbstractMemberBuilder.java:56)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildFieldDetails(ClassBuilder.java:301)  [javadoc]     at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source)  [javadoc]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  [javadoc]     at java.lang.reflect.Method.invoke(Method.java:597)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.invokeMethod(ClassBuilder.java:101)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildClassDoc(ClassBuilder.java:124)  [javadoc]     at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)  [javadoc]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  [javadoc]     at java.lang.reflect.Method.invoke(Method.java:597)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.invokeMethod(ClassBuilder.java:101)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.build(ClassBuilder.java:108)  [javadoc]     at com.sun.tools.doclets.formats.html.HtmlDoclet.generateClassFiles(HtmlDoclet.java:155)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.generateClassFiles(AbstractDoclet.java:164)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.startGeneration(AbstractDoclet.java:106)  [javadoc]     at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.start(AbstractDoclet.java:64)  [javadoc]     at com.sun.tools.doclets.formats.html.HtmlDoclet.start(HtmlDoclet.java:42)  [javadoc]     at com.sun.tools.doclets.standard.Standard.start(Standard.java:23)  [javadoc]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  [javadoc]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  [javadoc]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  [javadoc]     at java.lang.reflect.Method.invoke(Method.java:597)  [javadoc]     at com.sun.tools.javadoc.DocletInvoker.invoke(DocletInvoker.java:215)  [javadoc]     at com.sun.tools.javadoc.DocletInvoker.start(DocletInvoker.java:91)  [javadoc]     at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:340)  [javadoc]     at com.sun.tools.javadoc.Start.begin(Start.java:128)  [javadoc]     at com.sun.tools.javadoc.Main.execute(Main.java:41)  [javadoc]     at com.sun.tools.javadoc.Main.main(Main.java:31)

答案1

小编典典

看来这已被报告为Java错误。这似乎是由于使用了第三方库(例如JUnit)中的注释,而在Javadoc调用中不包含带有该注释的jar。

如果是这种情况,只需在javadoc上使用-classpath选项并包括额外的jar文件。

Caused by: java.lang.ClassCastException

Caused by: java.lang.ClassCastException

报错信息如下: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs (LauncherImpl.java:389) at com.sun.javafx.application.LauncherImpl.launchApplication (LauncherImpl.java:328) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at sun.launcher.LauncherHelper$FXHelper.main (LauncherHelper.java:767) Caused by: java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1 (LauncherImpl.java:917) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155 (LauncherImpl.java:182) at java.lang.Thread.run (Thread.java:745) Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to javafx.beans.value.ObservableValue at ruiyi.gui.controller.special.AbstractSpecificAnalysisView.lambda$bindDataToJFXTreeTableColumnDT$1 (AbstractSpecificAnalysisView.java:106) at javafx.scene.control.TreeTableColumn.getCellObservableValue (TreeTableColumn.java:563) at javafx.scene.control.TreeTableColumn.getCellObservableValue (TreeTableColumn.java:548) at javafx.scene.control.TreeTableCell.updateItem (TreeTableCell.java:635) at javafx.scene.control.TreeTableCell.indexChanged (TreeTableCell.java:457) at javafx.scene.control.IndexedCell.updateIndex (IndexedCell.java:116) at com.sun.javafx.scene.control.skin.TableRowSkinBase.updateCells (TableRowSkinBase.java:533) at com.sun.javafx.scene.control.skin.TreeTableRowSkin.updateCells (TreeTableRowSkin.java:220) at com.sun.javafx.scene.control.skin.TableRowSkinBase.init (TableRowSkinBase.java:147) at com.sun.javafx.scene.control.skin.TreeTableRowSkin.(TreeTableRowSkin.java:89) at com.jfoenix.skins.JFXTreeTableRowSkin.(JFXTreeTableRowSkin.java:59) at com.jfoenix.controls.JFXTreeTableRow.createDefaultSkin (JFXTreeTableRow.java:45) at javafx.scene.control.Control.impl_processCSS (Control.java:872) at javafx.scene.Node.processCSS (Node.java:9056) at javafx.scene.Node.applyCss (Node.java:9153) at com.sun.javafx.scene.control.skin.VirtualFlow.setCellIndex (VirtualFlow.java:1964) at com.sun.javafx.scene.control.skin.VirtualFlow.getCell (VirtualFlow.java:1797) at com.sun.javafx.scene.control.skin.VirtualFlow.getCellLength (VirtualFlow.java:1879) at com.sun.javafx.scene.control.skin.VirtualFlow.computeViewportOffset (VirtualFlow.java:2528) at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren (VirtualFlow.java:1189) at javafx.scene.Parent.layout (Parent.java:1087) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Scene.doLayoutPass (Scene.java:552) at javafx.scene.Scene.preferredSize (Scene.java:1646) at javafx.scene.Scene.impl_preferredSize (Scene.java:1720) at javafx.stage.Window$9.invalidated (Window.java:846) at javafx.beans.property.BooleanPropertyBase.markInvalid (BooleanPropertyBase.java:109) at javafx.beans.property.BooleanPropertyBase.set (BooleanPropertyBase.java:144) at javafx.stage.Window.setShowing (Window.java:922) at javafx.stage.Window.show (Window.java:937) at javafx.stage.Stage.show (Stage.java:259) at application.Main.start (Main.java:80) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162 (LauncherImpl.java:863) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175 (PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda$null$173 (PlatformImpl.java:295) at java.security.AccessController.doPrivileged (Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$174 (PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run (InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop (Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$148 (WinApplication.java:191) 这里的 ObservableValue 是 javafx.beans.value 包下的 interface 我的代码是这样的: protected void bindDataToJFXTreeTableColumnDT (JFXTreeTableColumn column, String key) { // 数据查找绑定到 table view column.setCellValueFactory ((TreeTableColumn.CellDataFeatures param) -> { if (column.validateValue (param)) return param.getValue ().getValue ().getValue (key); else return column.getComputedValue (param); }); } 我同事写的代码是这样的 protected void bindDataToJFXTreeTableColumn (JFXTreeTableColumn column, String key) { // 数据查找绑定到 table view column.setCellValueFactory ((TreeTableColumn.CellDataFeatures param) -> { if (column.validateValue (param)) return param.getValue ().getValue ().getValue (key); else return column.getComputedValue (param); }); } 同事的代码执行不报错,我的报错。

Caused by: java.lang.ClassCastException: class java.lang.Double cannot be cast to class org.apach...

Caused by: java.lang.ClassCastException: class java.lang.Double cannot be cast to class org.apach...

错误:

Caused by: java.lang.ClassCastException: class java.lang.Double cannot be cast to class org.apache.hadoop.io.WritableComparable (java.lang.Double is in module java.base of loader ''bootstrap''; org.apache.hadoop.io.WritableComparable is in unnamed module of loader ''app'')

 

 

 原因:

          在写Comparator时方法写错了,还导错了包

         

 

     解决:  应该改为

         

           导入这两个包

           

 

 

ClassCastException:: cannot be cast to class java.lang.Comparable的处理方法

ClassCastException:: cannot be cast to class java.lang.Comparable的处理方法

在向数据结构如TreeSet中插入自定义的对象时,如以下代码:

public class demo {
    public static void main(String[] args) {
        TreeSet<Person> data = new TreeSet<>();
        Person person1 = new Person("Edmond",17);
        Person person2 = new Person("John",19);
        data.add(person1);
        data.add(person2);
        for(Person p : data){
            System.out.println(p);
        }
    }

    static class Person{
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
}

系统将会在第一次add时便进行报错:

在这里插入图片描述

原因在于当我们将数据存入TreeSet时,内部会自动进行排序,例如我们存入‘A‘,’C’,‘B’, 打印输出时将显示’A’,‘B’,‘C’。因此如果我们存入的数据类型为自定义类型时,系统将不知道如何进行排序。

因此我们需要implement Comparable接口,并自己定义比较规则,示范代码如下:

public class demo {
    public static void main(String[] args) {
        TreeSet<Person> data = new TreeSet<>();
        Person person1 = new Person("Edmond",19);
        Person person3 = new Person("Tom",9);
        data.add(person1);
        data.add(person2);
        data.add(person3);
        for(Person p : data){
            System.out.println(p);
        }
    }

    static class Person implements Comparable<Person>{
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public int compareto(Person o) {
            //this当前对象 与 o 比较
            //返回数据有三种类型:
            //整数 : 代表this当前对象较大
            //0   :  代表一样大
            //负数 : 代表this当前对象较小
            if(this.age > o.age){
                return 1;
            }else if(this.age == o.age){
                return 0;
            }
             return -1;
             //可以简写为return this.age - o.age;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ",age=" + age +
                    '}';
        }
    }
}

无报错,输出为:

在这里插入图片描述

总结

当遇到ClassCastException:: cannot be cast to class java.lang.Comparable,自定义的class需要implement Comparable接口,并根据需求重写compareto方法,
其中compareto方法返回值有三种:

        //整数 : 代表this当前对象较大
        //0   :  代表一样大
        //负数 : 代表this当前对象较小

Exception in thread

Exception in thread "main" java.lang.ClassCastException

启动 springboot 时,报这个错 Exception in thread "main" java.lang.ClassCastException

原因:热部署搞的,

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>

所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。对于 Java 应用程序来说,热部署就是在运行时更新 Java 类文件。在基于 Java 的应用服务器实现热部署的过程中,类装入器扮演着重要的角色。大多数基于 Java 的应用服务器,包括 EJB 服务器和 Servlet 容器,都支持热部署。类装入器不能重新装入一个已经装入的类,但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。

所以没有它又不行,只能在配置文件中加一句

<optional>true</optional>

这样就能正常运行了。

 

关于为什么生成javadocs时会出现ClassCastException?为什么java生成不了class文件的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Caused by: java.lang.ClassCastException、Caused by: java.lang.ClassCastException: class java.lang.Double cannot be cast to class org.apach...、ClassCastException:: cannot be cast to class java.lang.Comparable的处理方法、Exception in thread "main" java.lang.ClassCastException的相关知识,请在本站寻找。

本文标签: