7

我正在研究如何从命令行编译java。这是我所拥有的:

这是我所拥有的:

/myjava/compile.cmd
/myjava/src/a_pack/HelloWorld.java
/myjava/src/b_pack/Inner.java
/myjava/src/b_pack/Inner2.java
/myjava/bin

你好世界:

包 a_pack;

导入 b_pack.Inner;
导入 b_back.Inner2;
导入 java.util.ArrayList;
导入 java.util.Iterator;

公共类 HelloWorld {

    公共静态无效主要(字符串[]参数){

        System.out.println("你好,世界");     

        内部 myInner = new Inner();
        myInner.myInner();

        内层2 myInner2 = 新内层2();
        myInner2.myInner();


        ArrayList myArray = new ArrayList();
        myArray.add(1);
        myArray.add(2);
        myArray.add(3);

        迭代器 itr = myArray.iterator();
        而 (itr.hasNext())
        {
            System.out.println(itr.next());
        }

    }

}

内部.java

包 b_pack;

公共类内部{

    公共无效 myInner() {
        System.out.println("内部方法");
    }

}

内部2.java

包 b_pack;

公共类 Inner2 {

    公共无效 myInner() {
        System.out.println("SecondInner");
    }

}

我正在编译这个,javac -d bin -sourcepath -src src/a_pack/HelloWorld.java 这很好。

现在我的理解是,因为 HelloWorld.java 在它的 import 语句中引用了其他包,所以 javac 去编译这些包。而且我猜对于所有的java包,javac在内部都有它们或其他东西。

无论如何-如果我将以下导入行添加到 HelloWorld.java

import java.nio.file.Files;

它失败了

D:\.....\myjava>javac -d bin -sourcepath src src/a_pack/HelloWo
rld.java
src\a_pack\HelloWorld.java:8: 包 java.nio.file 不存在
导入 java.nio.file.Files;
                    ^
1 个错误

这里有什么故事?为什么有些 java 包好有些不好?

4

4 回答 4

16

Java NIO是在 Java 7 中引入的。早期版本的 JDK 的编译器会阻止任何包含这些 NIO 类的代码。您需要升级到 JDK 7 或更高版本。

于 2013-05-16T03:38:34.793 回答
3

如果您在 OSX 上,请检查它正在使用的 JDK...

$ cd /System/Library/Frameworks/JavaVM.framework/Versions
$ readlink /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
$ javac -version
javac 1.7.0_25

如您所见CurrentJDK,它指向了错误的版本。您可以通过替换符号链接来解决此问题。

cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo ln -fs /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents CurrentJDK

归功于这篇博文,它为我节省了 5 分钟的跑步时间dtrace

于 2014-10-07T00:21:48.370 回答
1

我遇到了这个问题,发现我的JAVA_HOME环境变量仍然指向旧的 java 1.6。

  • 运行javac -version显示 1.7
  • 运行java -version显示 1.7

等等……</p>

删除该环境变量后,事情编译得很好。

于 2014-05-29T00:10:32.950 回答
0

Files 类仅包含静态方法。我不确定这是否是它无法导入的原因,但这确实意味着它不需要导入。

编辑:刚刚意识到您指定的包是import java.nio.files.Files。实际的包是 java.nio.file.Files; http://docs.oracle.com/javase/7/docs/api/java/nio/file/package-summary.html

于 2013-05-16T01:58:06.543 回答