Netbeans中<class>类型错误错误

15

我在编写一个Java程序时,定义了两个类,称为Class1和Class2。在Class1的构造函数体中,我调用了Class2的构造函数。然而,我遇到了编译错误。

 "The type of Class1(JSONObject) is erroneous". 

我尝试在谷歌上搜索这个错误,但无法找到任何关于这个确切错误的讨论,所以我想在Stack Exchange上发布它。

请问有人能解释一下这是什么类型的错误吗? class1和class2都非常简单:它们只有一个构造函数方法,在两种情况下都需要将JSONObject作为参数传递。唯一导入的是JSON。有什么建议吗?

//class1 definition
public class Class1 {
       public Class1(JSONObject jObject){
           try{
           //parsing json and saving class variables
           } catch(Exception e)
           {
               System.out.println("Class1 JSON Exception: " + e.getMessage());
           }
       }
}


//constructor of Class2
Class1 user;

public Class2(JSONObject jObject){
    try{
    JSONObject userJSON = jObject.getJSONObject("user");
    user = new Class1(userJSON); //error occurrs here
    }
    catch(Exception e){
   System.out.println("Class2 JSON Exception: " + e.getMessage());

    }
}

}

编辑:即使我在编译错误的情况下尝试运行代码,我也会得到以下运行时错误:

Exception in thread "main" java.lang.ExceptionInInitializerError
at bitcoin.thesis.Client.main(BTCJamClient.java:18)
Caused by: java.lang.RuntimeException: Uncompilable source code - Erroneous tree type:        
thesis.JSONArray
at thesis.Class3.<clinit>(Class3.java)
... 1 more
Java Result: 1

这里是Class3,另一个拥有默认构造函数的类。Client是主类,它接收HTTP请求并将JSON对象传递给Class2构造函数。基本上,这部分代码执行在Class1和Class2构造函数被调用之前。因此,它不是由编译错误直接引起的,但我怀疑它们与我的编码环境普遍存在的同一问题有关。

谢谢, 保罗


3
请张贴您当前的代码。 - Luiggi Mendoza
也许您已经更改了一些内容并保存了,但类并没有生成。请配置“保存时编译”。 - Braj
  1. 发布精确的错误消息(复制/粘贴实际文本)
  2. 发布包含错误的代码行。
  3. 发布在该行之前的任何相关代码。
- FoggyDay
1
userJSON是什么,你在哪里定义它的? - Vimal Bera
有人知道这个错误是什么意思吗?即使是一般性的解释也可以吗? - Paul
显示剩余5条评论
9个回答

52
我本想将此留言作为评论,但由于我没有声望,所以我不能这样做。我意识到这也是一个非常晚的回应,但不知道您是否已经找到了答案。我在搜索答案时遇到了同样的问题。
我还相信这个错误与代码无关,而是由NetBeans创建的错误。我发现同样的代码在一台机器上编译和运行得很好,但在另一台机器上却遇到了错误。
对我来说,解决方法是关闭NetBeans,清除NetBeans缓存并重新启动NetBeans。 我使用的是8.0版本,我的缓存位置是:
~ / .cache / netbeans / 8.0 /
我删除了文件夹中的所有内容,并在下次运行时一切都正常。
对于旧版本,我相信缓存可能位于不同的位置,可以通过从帮助菜单中打开关于窗口来找到。

5
对我来说,这个回答看起来很好!你提供了一个解决方案,这就是回答的意义所在。 - matsjoyce
7
这对我起了作用!在Windows 10上,缓存位于 C:\Users\USER_NAME\AppData\Local\NetBeans\Cache - birgersp
抱歉,我刚看到这个答案!我很久以前就停止使用NetBeans了,但知道我不是疯了还是很令人满意的! - Paul

4

请确保您在类中输入了正确的包名称。


2
我曾经遇到了同样的问题,我的解决方法非常简单。
情况如下:
我将其他项目中的一些类复制/粘贴到正在工作的项目的一个包中。
其中一些类有旧的包声明,但编译器没有发出任何警告(因为某种原因)。
当我使用返回类型为“错误打包”类之一的方法时,就会出现这个错误。
(类型错误)
解决方案
要解决此问题,我更改了包声明以正确匹配。

2

我遇到了同样的问题,通过使用接受的答案进行修复,因为我正在使用 Windows 10,所以这是缓存文件夹的位置:

C:\Users\USER_NAME\AppData\Local\NetBeans\Cache\8.1

AppData 是一个隐藏文件夹。


1
我在netbeans 8.0上也遇到了同样的问题。以下技巧可以解决它:
右键单击项目 -> 属性 -> 构建 -> 编译 ==> 取消选中“保存时编译”,然后点击确定

0
我遇到了这个问题。我通过将所有依赖的JAR文件添加到项目/文件中来解决它。

0

Grease的答案是对的,删除Netbeans缓存内容可以解决问题。我正在使用MacOS Sierra上的Netbeans 8.1。

删除"/Users//Library/Caches/NetBeans/8.1/"下的所有内容。


0

在采取“核武器”方法之前,我决定停止/重新启动NetBeans 8.2。当我重新进入时,错误已经消失了。


0

这是对Grease答案的补充。(由于声望不足,我无法添加评论。)

我有时也会遇到同样的问题,并且总是删除整个文件夹,因此NetBeans必须重建maven-stuff,这可能需要几分钟。

如果有人使用maven并且不希望NetBeans必须完全重建maven repos和-index,请勿删除NetBeans缓存文件夹中的以下文件夹:

  • index
  • mavencachedirs
  • mavenindex

刚在NetBeans 11.3上进行了测试: 不删除这三个文件夹可以消除错误,但不会影响maven。 我想这在旧版本的NetBeans中也是一样的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接