2012-04-25 24 views
10

Tôi đang sử dụng JDK7 và Eclipse Indiago trong Windows 7 64 bit. Tôi đặt biến môi trường JAVA_HOME thành F: \ JDK7 và thêm% JAVA_HOME% \ bin vào đường dẫn. Đó là mẫu mã của tôi:Không có com.sun.tools.javac trong JDK7

com.sun.tools.javac.Main m1 = new com.sun.tools.javac.Main(); 
m1.compile(source); 

Lỗi tôi nhận được:

Type com.sun.tools cannot be resolved to a type

Tại sao không có com.sun.tools? Có chuyện gì vậy?

enter image description here

Trả lời

25

Dường như bạn đang sử dụng Eclipse. Theo mặc định, Eclipse chỉ nhập các JRE jars, chứ không phải từ các JRE.

Giải pháp 1:

  1. Đến Eclipse sở thích (trên Windows: Window -> Preferences)
  2. Mở thích Java -> JRE cài đặt
  3. Chọn JRE của bạn và nhấn chỉnh sửa
  4. Sử dụng "Thêm lọ bên ngoài" để bao gồm tools.jar (được tìm thấy trong JDK_HOME/lib)

Giải pháp 2:

Chỉnh sửa đường dẫn xây dựng dự án của bạn và thêm thư viện bên ngoài: tools.jar được tìm thấy trong JDK_HOME/lib

+0

Sau khi tôi đã làm như bạn đã nói. Có một lỗi khác: 'Mô tả \t Tài nguyên \t Đường dẫn \t Vị trí \t Loại Giới hạn truy cập: Không thể truy cập vào hàm khởi tạo do hạn chế trên thư viện yêu cầu C: \ Program Files \ Java \ jdk1.7.0 \ lib \ tools.jar \t Compiler.java \t/imageJ/source/ij/plugin \t dòng 58 \t Vấn đề Java ' – huoxudong125

+1

Kiểm tra cài đặt trình biên dịch trong Eclipse. Bạn có thể có một số quy tắc nói rằng API bị hạn chế nên được báo cáo là Lỗi (Window -> Preferences -> Java -> Compiler -> Errors/Warnings xem phần về "API không được chấp nhận và bị hạn chế") –

7

Bạn đang tốt hơn bằng cách sử dụng JavaCompiler API, chứ không phải là attemtping gọi javac trực tiếp mà là ở tools.jar API sẽ bổ sung này cho bạn nếu bạn sử dụng nó.

+0

Trong 'lib' của JDK của bạn. –

+0

Tôi sẽ biên dịch mã kiểu cũ thực sự. Bạn vẫn đúng. Cảm ơn – linker

0

javac nằm trong thư mục bin JDK, chứ không phải thùng JRE.

Tôi đã có một vấn đề tương tự và nó bật ra rằng do nhầm lẫn tôi đã thiết lập biến JAVA_HOME tôi để JRE thay vì JDK, tức là,

C:\Program Files\Java\jre1.8.0_60 instead of 
C:\Program Files\Java\jdk1.8.0_60 

Bởi vì tôi "biết" mà tôi đã sao chép đúng tên thư mục, nó đã cho tôi lứa tuổi để xem hai nhân vật khác nhau và sửa chữa vấn đề.