Java 编译时出错,";找不到符号“;关于确实存在的方法

Java 编译时出错,";找不到符号“;关于确实存在的方法,java,compilation,compiler-errors,Java,Compilation,Compiler Errors,尝试在NetBeans 8.0中编译项目时出现以下错误: error: cannot find symbol dim_names.add(TheDim.getShortName().toUpperCase()); ^ symbol: method getShortName() location: variable TheDim of type Dimension 因此,对于熟悉netCDF库的人来说,TheDi

尝试在NetBeans 8.0中编译项目时出现以下错误:

error: cannot find symbol
        dim_names.add(TheDim.getShortName().toUpperCase());
                            ^
  symbol:   method getShortName()
  location: variable TheDim of type Dimension
因此,对于熟悉netCDF库的人来说,
TheDim
,在本例中是
ucar.nc2.Dimension
类的对象(如果有帮助的话,我使用的是v4.3)。当我在IDE中浏览库和查看库时,方法
getShortName()
肯定存在。简单地说,是的,netcdfAll-4.3.jar在我的项目库中。当我通过调试模式运行代码时,它工作得很好


我不确定这是怎么回事,但它阻止了我建立这个项目。任何可能的解决方案或解决方法?

如果使用类型
ucar.nc2.Dimension
,则错误消息为

location: variable TheDim of type ucar.nc2.Dimension
您可能在默认包中定义了自己的维度类。永远不要在默认包中定义任何类,如果在与类相同的包中有维度类,请使用完全限定名:
ucar.nc2.Dimension


此外,Java中的变量应该以小写字母开头。对于Java程序员来说,您的代码读作“
getShortName()
是类
TheDim
”的静态方法,这主要是因为您不遵守Java命名约定。

是否导入了正确的
维度
?也有。这似乎是原因,但不是。对于这个特定的类,导入的是一些java UTIL(列表)和ucar.nc2包中的东西。还检查了是否存在冲突的类名,但仍然没有,我没有任何名为“Dimension”的类会在该包或整个项目中发生冲突。人们肯定会对命名约定感到敏感。对不起,我打错了。但是无论如何,不,我没有创建任何冲突类,称为“Dimension”。从第一行到最后(通过编辑您的问题),向我们展示该类的全部代码(省略不相关的方法)。正如我所说,我测试了从Java6到Java8的所有javac版本,它们都显示了未调用方法的类的完全限定名。因此,如果您的错误消息是准确的,那么您在默认包中确实有一个维度类(并且您的类在默认包中,否则您将无法使用它)。也许你自己没写过。您的类是否在默认包中?如果你把它放在一个包裹里,会发生什么?我想那是不必要的额外努力。相反,由于您遇到的问题是它只是表示维度而不是整个包的位置,因此我强制变量类出错(同样在ucar.nc2中)<代码>theVar.getShortName()更改为
theVar.GetShortName()。它以同样的方式显示错误(只是变量)。也许是因为进口?无论如何,它工作得很好,不会对原始行抛出编译错误。也许我错了,但不提供所需的详细信息不会帮助您得到正确的答案。请提供更多细节。另外,还可以指定您正在使用的编译器。无论如何,我创建了一个全新的空项目,只使用netcdf库和弹出错误所需的行,您是对的,它编译得很好。所以我不确定冲突在哪里,但我会检查原始项目中包含的其他库。我至少99.9%肯定这不是我写的课。