Java 从eclipse中的包访问引用的库

Java 从eclipse中的包访问引用的库,java,eclipse,jar,Java,Eclipse,Jar,如果将类保存在默认包中,则只能访问引用的库类。如果我试图从任何其他包访问它们,我会得到“无法解析类名”。你知道为什么会这样吗 您需要将包导入其他包中 一个包中的类不能直接引用另一个包,除非它被引用。检查您是否有正确的import声明,并且您引用的类型具有publicaccess修饰符 默认包中类型的导入声明不可能按定义进行。JLS指定从未命名包导入类型是编译时错误。 您必须通过反射或更好的方式访问您的类—永远不要使用默认包。当您想要在默认包中创建类型时,Eclipse应该向您显示一条警告,因为通

如果将类保存在默认包中,则只能访问引用的库类。如果我试图从任何其他包访问它们,我会得到“无法解析类名”。你知道为什么会这样吗


您需要将包导入其他包中


一个包中的类不能直接引用另一个包,除非它被引用。

检查您是否有正确的
import
声明,并且您引用的类型具有
public
access修饰符

默认包中类型的导入声明不可能按定义进行。JLS指定从未命名包导入类型是编译时错误。 您必须通过反射或更好的方式访问您的类—永远不要使用默认包。当您想要在默认包中创建类型时,Eclipse应该向您显示一条警告,因为通常不鼓励这样做


如果您使用的是像Eclipse这样的IDE,那么请尝试在要使用它的类中键入类型名称后面的CTRL+SPACE。Eclipse应该为您提供所有匹配的机会,并且如果您选择了您的类,Eclipse将自动为您添加导入。

该软件包是在快速搜索之后从普林斯顿的入门课程标准库中获得的

如果您继续阅读页面上的常见问题

如果我使用一个命名包来构造我的代码,编译器不能 不再访问stdlib.jar中的库。为什么不呢? A.图书馆 在stdlib.jar中,它们位于“默认”包中。在Java中,您无法访问 来自命名包的默认包中的类。如果你需要 将我们的库与命名包一起使用,您可以使用打包的 版本stdlib-package.jar

下载包jar文件:

右键单击项目文件夹并添加外部JAR

import edu.princeton.cs.introcs.*;
将上面的行添加到需要引用类的类中。 第一行引用正确的包名,*通配符导入其中的所有类

希望这能有所帮助


//编辑-如果右键单击项目文件夹并使用“组织导入”,速度会更快,因此不必手动添加到每个类

引用的类没有任何包名,因此我不确定在导入声明中指定什么,eclipse也没有给出任何修复建议。这是因为从未命名的包导入类型无效。因此,无法导入该类。您必须将类移动到命名包或通过反射访问它。我已经编辑了我的答案。那么你的意思是我需要更改正在导入的Jar文件吗?那么jar文件中的类属于一个包?我不认为我可以更改jar,所以我不应该在我的项目中创建任何包?我不确定这是否正确……我添加了一个图像来解释这个问题。此外,当它使用默认包时,有一个有问题的库。很明显:您不能从默认包导入。时期不过,您可以从默认包中的类访问这些类,因为这样就不需要导入。您可以构建自己的jar文件,并将类移动到命名包中。或者至少你可以通过反射来访问它们。这个版本有一个包名,我按照Fabian的建议,用包创建了我自己的jar。谢谢您在构建我自己的库时为我节省了一些时间。似乎没有针对algs4.jarNM的打包版本。NM找到了它:整个场景如FAQ:Q中所述。如果我使用命名包来构造代码,编译器将无法再访问stdlib.jar或algs4.jar中的库。为什么不呢?A.stdlib.jar和algs4.jar中的库位于“默认”包中。在Java中,您不能从命名包访问默认包中的类。如果您需要将我们的库与命名包一起使用,您可以使用以下包版本:stdlib-package.jar和algs4-package.jar。对于使用algs4.cs.princeton.edu/code/algs4//package.jar版本的任何人,导入路径是
import edu.princeton.cs.algs4.
@ddayan我建议您更改Jasmine答案的最佳答案。还有,有人能解释为什么有人会开发一个只能由默认包访问的.jar吗?