2015-09-18 252 views
-2

我目前有一个类Printer这是静态访问,但当我尝试编写项目后添加一个函数的类我得到error: cannot find symbolJava编译错误:找不到符号

我知道这通常是由错字,超范围引用和错误声明造成的,但这里的奇怪之处在于旧的方法工作得很好。

此代码有完全相同相同的结构,我自己的代码,它的工作原理:

import java.util.*; 
import java.lang.*; 
import java.io.*; 

class Printer { 
    private static String errorTitle; 
    private static String regularTitle; 

    Printer(String regularTitle_) { 
     errorTitle = "Some error: "; 
     regularTitle = regularTitle_; 
    } 

    public static void printError(Exception e) { 
     System.out.println(errorTitle + e.getMessage()); 
    } 

    public static void print(String message) { 
     System.out.println(regularTitle + message); 
    } 
} 

class Main { 
    public static void main(String[] args) { 
     new Printer("Message: "); 

     try { 
      throw new Exception(); 
     } 
     catch(Exception e) { 
      //This works 
      Printer.print(e.toString()); 

      //This generates a cannot find symbol error when compiling 
      Printer.printError(e); 
      // ^here 
     } 
    } 
} 

完整的错误信息是:

[javac] Compiling 1 source file to C:\Javaprojects\MyProject\alpha\build 
[javac] C:\Javaprojects\MyProject\alpha\src\Main.java:35 error: cannot find symbol 
[javac] Printer.printError(e); 
[javac]  ^
[javac] symbol: method printError(Exception) 
[javac] location: class Printer 
[javac] 1 error 

这如果我将Printer.printError(e)更改为,则工作良好。

这可能是什么原因?难道说我指的是编译类的某种缓存版本?

+3

我在这里看到没有错误。 –

+2

只是尝试干净。 – Rustam

+0

我已经清理了这个项目并重新编译了好几次。错误仍然存​​在。我试图找出原因,但我完全没有想法 – sweerpotato

回答

2

您的代码为is ok,程序流程没有,但这里没有问题。 没有必要的唯一的事情是进口的,


删除进口:

import java.util.*; 
import java.lang.*; 
import java.io.*; 

清洁工程,并重建它。


如果不行,start eclipse in clean mode,再次清理并重建项目。


ADD-ON

的问题就解决了。实际上,它是导致编译错误的*进口。
我可以访问Printer.print(String)而不是Printer.print(Exception)
为什么会出现这种情况?

只要我找不到UTIL任何Printer类,郎或IO包,唯一的方案,我可以想像你得到这个错误,就是:Eclipse的是导入您Printer类,其中方法的先前版本Printer.printError(Exception)尚未存在,请将此汇总为造成建筑物不良的进口,以便您有持续进行多次清理的问题。

+0

我尝试删除导入,清理项目并重建它。问题仍然存在,虽然 – sweerpotato

+0

@sweerpotato你把我的答案结束了吗? –

+0

是的,我做过。我试过这个 – sweerpotato

2

这可能是什么原因造成的?

不明确。它可能有很多事情......包括IDE工作空间的某种错误配置或损坏等等,或者是一个IDE错误。

难道说我指的是某种编译类的缓存版本?

它可能是。


您向我们展示的代码似乎由同一个源文件中的两个类组成。这是合法的,但不推荐,它可能是你的问题的原因的一部分。

我建议你把这两个类放到单独的源文件中(如果它们不是)。


除此之外,我认为没有足够的信息来进行正确的诊断。我从评论中看到,人们正在无法重现您的问题。

(我不知道如何删除不必要的进口将使任何区别,没有Printer类可能被意外进口这些软件包。)


一对夫妇的离the-墙上的想法:

  • 你还没有宣布你自己的班级叫做Exception,对吗?

  • 你不是被你的源代码中的“同源”问题困住,是吗?

+0

我还没有宣布自己的类叫做异常,我敢肯定这不是一个同形问题。好的建议,但! – sweerpotato

+0

一个源文件中的两个类怎么样? –

0

只需将您的班级打印机重命名为其他内容即可。