2013-04-08 31 views
21

Vì vậy, tôi đang nhận được- warning: [options] bootstrap class path not set in conjunction with -source 1.6Đường dẫn lớp khởi động không được đặt

Và tôi sắp hỏi 3 câu hỏi về nó. Tôi hiểu rằng tôi cần phải thiết lập đường dẫn lớp bootstrap nhưng tôi không chắc chắn tôi hiểu làm thế nào. Một google nhanh chóng chỉ gửi cho tôi đến các trang được trích dẫn từ trang Oracle, nhưng tôi đọc trang Oracle và không cảm thấy rằng tôi hiểu nó đặc biệt tốt.

Tôi hiện đang chạy mã này trên Netbeans, vì vậy tất cả những gì tôi phải làm là nhấn nút phát để nó biên dịch và chạy. Có một tài sản mà dictates cách này sẽ biên dịch để tôi có thể thêm vào đường dẫn lớp bootstrap?

Ngoài ra, trong trường hợp sắp tới tôi sẽ gỡ bỏ nó chỉ chạy trên Netbeans và chạy nó từ dòng lệnh, cách chính xác để biên dịch với đường dẫn lớp bootstrap là gì? Họ nói $ javac -source 6 HelloWorld.java nhưng chỉ nói rằng -source 1.6 thực sự là giải pháp?

Có lẽ một câu hỏi lớn hơn nữa, làm cách nào để tránh loại cảnh báo này trong tương lai? Nếu tôi hiểu ngay cả một chút, tôi đang tham khảo một nguồn java cũ và do đó các phương pháp cũ hơn. Tôi không chắc chắn như thế nào hoặc khi điều đó xảy ra.

Trả lời

36

Bạn đang thực hiện việc biên dịch chéo. Bạn đang sử dụng một trình biên dịch JDK 7 để biên dịch các lớp cho JDK 6. Điều này là không sao nhưng để tránh các vấn đề trình biên dịch muốn có được bàn tay của nó trên JDK 6 rt.jar. Lý do đằng sau đó là bạn thực sự có thể tạo ra các lớp không hoạt động với JDK 6 vì bạn có thể đang sử dụng các quy tắc ngôn ngữ cũ (trong trường hợp này là 1.6) nhưng các lớp bootstrap mới. Một số phương pháp có thể không có mặt trong JDK cũ hơn chẳng hạn. Vì vậy, bạn có được biên dịch của bạn thực hiện nhưng một khi bạn chạy chương trình nó có thể thổi lên với một MethodNotFoundException.

Couple các giải pháp, bạn chỉ có thể chọn một

  • Chỉ định rt.jar từ JDK 6. Tại sao không sử dụng trình biên dịch lớn hơn thậm chí?
  • Sử dụng trình biên dịch JDK 6 (có rt.jar bao gồm). Tại sao lại sử dụng 7 nếu không cần 7 tính năng.
  • Bỏ qua các cảnh báo và có vùng phủ sóng thử nghiệm tốt để chắc chắn rằng bạn không sử dụng Java 7 tính năng
    • Tôi không biết về NetBeans nhưng trong Eclipse bạn cũng có thể nói rằng bạn đang biên dịch chống lại JDK 6 nên nó thắng không thực sự biên dịch nếu bạn sử dụng các tính năng Java 7.
  • nhu cầu thay đổi kinh doanh và biên dịch cho Java 7.
+1

Cảm ơn, Tôi cảm thấy như thế này xóa nó lên một chút – Stephopolis

+7

Downvoting vì một số giải pháp được đưa ra không có hướng dẫn ở tất cả làm thế nào để làm cho họ. – seansand

+0

@toomasr Hãy hiểu rằng việc quay lại JDK cũ hơn sẽ dễ dàng làm việc trên máy cục bộ của bạn (MacO là một ngoại lệ btw). Khi làm việc cho các công ty (lớn hơn), bạn thường xuyên không thể thay đổi JDK của bạn. Ví dụ, bạn nhất định sử dụng 1,7 trên máy phát triển của mình trong khi máy chủ bạn nhắm mục tiêu vẫn bị mắc kẹt với 1.6. Tất nhiên bây giờ bạn có thể đợi cho đến khi họ (quản trị viên máy chủ) cuối cùng chuyển sang 1.7 hoặc bạn cư xử như một người chuyên nghiệp và hoàn thành công việc của bạn. Điều gì sẽ là sự lựa chọn của bạn? – whaefelinger

1

Chỉ cần đi nhấp chuột phải vào các tính chất của dự án và sau đó đi đến Binding và chọn JDK 1.7 cung cấp cho bạn đang sử dụng tính năng của nó trong dự án NetBeans của bạn và đây là lý do tại sao bạn nhận được vấn đề. Điều này sẽ giúp giải quyết vấn đề và làm việc cho tôi.

+0

Làm cách nào để 'liên kết' với JDK 1.7 giúp chỉ định 1.6 làm đường dẫn lớp khởi động? –

0

Tôi hiểu rằng tôi cần đặt đường dẫn lớp khởi động nhưng tôi không chắc mình hiểu cách thực hiện.

Trong Netbeans 8.0.2, hãy vào:

Run > Set Project Configuration > Customise... 

Trong cửa sổ Categories, hãy vào:

Build > Compiling 

Trường chốt là "bổ sung Compiler Options" mà bạn có thể thêm:

-bootclasspath /your/path/to/lower/java/version/lib/rt.jar 
Các vấn đề liên quan