2013-05-16 20 views
6

Pracuję obecnie, jak skompilować Javę z linii poleceń w tej chwili. Oto co mam:pakiet java.nio.file nie istnieje

oto co mam:

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

HelloWorld:

 
package a_pack; 

import b_pack.Inner; 
import b_back.Inner2; 
import java.util.ArrayList; 
import java.util.Iterator; 

public class HelloWorld { 

    public static void main(String[] args) { 

     System.out.println("Hello, World");  

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

     Inner2 myInner2 = new Inner2(); 
     myInner2.myInner(); 


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

     Iterator itr = myArray.iterator(); 
     while (itr.hasNext()) 
     { 
      System.out.println(itr.next()); 
     } 

    } 

} 

Inner.java

 
package b_pack; 

public class Inner { 

    public void myInner() { 
     System.out.println("Inner Method"); 
    } 

} 

Inner2.java

 
package b_pack; 

public class Inner2 { 

    public void myInner() { 
     System.out.println("SecondInner"); 
    } 

} 

Kompiluję to z javac -d bin -sourcepath -src src/a_pack/HelloWorld.java i działa dobrze.

Teraz rozumiem, że ponieważ HelloWorld.java odwołuje się do innych pakietów w swoich instrukcjach importu, to javac je i kompiluje. I zgaduję, że dla wszystkich pakietów java, javac ma je wewnętrznie lub coś.

Zresztą - jeśli dodać następującą linię przywozowego HelloWorld.java

import java.nio.file.Files;

nie powiedzie się z

 

D:\.....\myjava>javac -d bin -sourcepath src src/a_pack/HelloWo 
rld.java 
src\a_pack\HelloWorld.java:8: package java.nio.file does not exist 
import java.nio.file.Files; 
        ^
1 error 

co chodzi tutaj? Dlaczego niektóre pakiety java są dobre, a inne nie?

+2

NIO zostało wprowadzone w języku Java 7. Jaką wersję Java używa? – Reimeus

+0

@Reimeus JDK, którego używam, zawiera javac to jdk1.6.0_32. – dwjohnston

+0

Oto twoja odpowiedź. Musisz dokonać aktualizacji do JDK 7. – Reimeus

Odpowiedz

14

Java NIO został wprowadzony w języku Java 7. Kompilatory z wcześniejszych wersji JDK będą działać z każdym kodem, który zawiera te klasy NIO. Musisz uaktualnić do JDK 7 lub nowszego.

0

Klasa plików składa się tylko z metod statycznych. Nie jestem pewien, czy właśnie dlatego nie można go zaimportować, ale oznacza to, że nie trzeba go importować.

Edycja: Uświadomiłem sobie, że określony pakiet to import java.nio.files.Files. Rzeczywisty pakiet to java.nio.file.Files; http://docs.oracle.com/javase/7/docs/api/java/nio/file/package-summary.html

+0

Przepraszam, to był literówka z mojej strony. Problem nadal pozostaje. – dwjohnston

1

Natrafiłem na ten problem i znalazłem moją zmienną środowiskową JAVA_HOME, która wciąż wskazywała na starą wersję 1.6 java.

  • Running javac -version pokazał 1.7
  • Running java -version pokazał 1.7

etc ...

Na usunięcie tej zmiennej środowiskowej, co skompilowane w porządku.

3

Jeśli jesteś na OSX, a następnie sprawdzić JDK jest za pomocą ...

$ 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 

Jak widać CurrentJDK jest skierowany do niewłaściwej wersji. Możesz to naprawić, zastępując dowiązanie symboliczne.

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

zasługa this blog post co zaoszczędziło mi 5min prowadzenia dtrace.

Powiązane problemy