所以我想搞一个我刚刚下载的名为stdlib.jar
的库(从http://introcs.cs.princeton.edu/java/stdlib/下载)
所以我将库添加到项目中,当我检查项目时,它在netbeans中看起来像这样:
所以看来图书馆设置得当。
但是在我的项目中,当我尝试使用其中一个库类时,它看起来像这样。
将鼠标放在顶部的导入声明上, expected "."
如果我将import语句更改为import stlib.StdAudio
,则表示该库不存在。
任何人都知道问题是什么?
答案 0 :(得分:1)
这个库的所有源代码(这是非常不寻常的:我第一次遇到这个)是在默认包中,这意味着如果你的类也在默认包中,你不必导入任何 即可。只需使用班级名称。
StdAudio.play(tone);
确保它在类路径中,但我认为如果我从NetBeans查看您的屏幕截图。
更新:好像我错了。在页面底部,您可以找到:
问。如果我使用命名包来构造我的代码,编译器就不能 更长时间访问
stdlib.jar
中的库。为什么不呢? A。图书馆 在stdlib.jar中是在“默认”包中。 在Java中,您无法访问 来自命名包的默认包中的类。如果需要 使用我们的标准库与命名包,你必须把我们的 包中的库,如此解决方案。
因此,您必须将类复制到项目包musicplayer
。
答案 1 :(得分:1)
1)摆脱import语句。
2)摆脱包装声明。
3)将musicplayer.java直接放在文件夹/ src
中4)右键单击项目菜单中的库并添加stdlib.jar
答案 2 :(得分:0)
如果您在Coursera上使用Sedgewick教科书或算法课程,这可能会有所帮助。
如上所述,stdlib.jar中的库位于DEFAULT PACKAGE中。在Java中,您无法从命名包访问默认包中的类。 因此,您必须将源文件移动到项目的DEFAULT PACKAGE。这意味着您必须将源musicplayer.java文件从./src/MUSICPLAYER/文件夹直接移动到项目的./src文件夹,然后删除MUSICPLAYER文件夹。你还必须删除“包MUSICPLAYER;”源文件开头的语句。
基本上你需要做的就是这些。现在,当您将源文件移动到默认包并将“stdlib.jar”添加到库时,从库中寻址类就没有问题了。您不需要他们的“导入”声明。