2011-07-27 1 views
23

Tôi có một Dự án Java trong NetBeans 7.0.Cách lấy đúng hình ảnh từ thư mục 'Tài nguyên' trong NetBeans

Tôi muốn thêm một số hình ảnh vào một số nhãn động. Hình ảnh sẽ khác nhau tùy thuộc vào trạng thái của chương trình.

Tôi đặt một hình ảnh như vậy, 'filling.jpg', trong thư mục 'tài nguyên' của dự án của tôi.

Tôi muốn tiếp cận tệp này một cách chính xác (không phải đường dẫn tuyệt đối hoặc tương đối, vì điều đó sẽ gây ra sự cố khi tôi tạo tệp jar).

Vì vậy, tôi tìm thấy phương pháp này:

ImageIcon fillingIcon = new ImageIcon(getClass().getClassLoader().getResource("filling.jpg")); 
labelFontFilling.setIcon(fillingIcon); 

Nó giữ cho tôi java.lang.NullPointerException. Nhưng tôi chắc chắn rằng có hình ảnh đó, bởi vì tôi có thể gán hình ảnh cho nhãn từ trình đơn Thuộc tính NetBeans cho nhãn đó (nhưng tôi không muốn điều này, tôi muốn thêm hình ảnh bằng mã Java).

Tôi đang làm gì sai và làm cách nào để có được hình ảnh đó một cách chính xác?

+1

bạn có thể in đường dẫn được đưa ra không? Giống như System.out.println (getClass(). GetClassLoader(). GetResource ("filling.jpg")), điều này có thể cung cấp cho bạn một đầu mối của đường dẫn mà bạn đang cố gắng sử dụng. –

+0

Nó trở lại 'null', vì vậy đó là một vấn đề của Exeption. Nhưng tôi không thể hiểu tại sao nó trở lại là null – ShockwaveNN

+1

và thư mục tài nguyên được tạo trong dự án của bạn ở đâu? là nó trong classpath? –

Trả lời

20

Cảm ơn, Valter Henrique, với mẹo mà tôi quản lý để nhận ra, rằng tôi chỉ cần nhập đường dẫn không chính xác vào hình ảnh này. Trong một trong những cố gắng của tôi sử dụng

String pathToImageSortBy = "resources/testDataIcons/filling.png"; 
    ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy)); 

Nhưng cách chính xác là tên sử dụng của dự án của tôi trong đường dẫn đến tài nguyên

String pathToImageSortBy = "nameOfProject/resources/testDataIcons/filling.png"; 
ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy)); 
39

Đây là một nỗi đau, sử dụng NetBeans IDE 7.2.

  1. Bạn cần phải nhớ rằng Netbeans dọn dẹp thư mục xây dựng bất cứ khi nào bạn xây dựng lại, vì vậy
  2. Thêm một thư mục tài nguyên để các src thư mục:

    • (dự án)
      • src
        • thư mục gói dự án (chứa.file java)
        • nguồn (bất cứ tên nào bạn muốn)
        • hình ảnh (thư mục con tùy chọn)
  3. Sau khi sạch/xây dựng cấu trúc này được propogated vào thư mục Xây dựng:

    • (dự án)
      • build
        • lớp
          thư mục dự án, gói
          • (chứa tạo ra .class file)
          • nguồn lực (tài nguyên của mình )
          • hình ảnh (thư mục con của bạn không bắt buộc)

Để truy cập vào các nguồn tài nguyên:

dlabel = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("resources/images/logo.png"))); 

và:

if (common.readFile(getClass().getResourceAsStream("/resources/allwise.ini"), buf).equals("OK")) { 

làm việc cho tôi. Lưu ý rằng trong một trường hợp có một "/" hàng đầu và trong trường hợp kia thì không. Vì vậy, các gốc của đường dẫn đến các tài nguyên là "lớp học" thư mục trong thư mục xây dựng.

Nhấp đúp vào tệp jar thực thi trong thư mục dist. Đường dẫn đến tài nguyên vẫn hoạt động.

15

Tôi có một cách tiếp cận hơi khác có thể hữu ích/mang lại lợi ích cho một số người.

Dưới thư mục dự án chính của bạn, tạo thư mục tài nguyên. Cấu trúc thư mục của bạn sẽ trông giống như thế này.

  • thư mục dự án
    • build
    • quận
    • lib
    • nbproject
    • nguồn
    • src

Chuyển đến các thuộc tính của dự án của bạn. Bạn có thể làm điều này bằng cách kích chuột phải vào dự án của bạn trong cửa sổ tab Projects và chọn Properties trong trình đơn thả xuống.

Trong danh mục ở bên trái, chọn Nguồn.

Trong thư mục gói nguồn ở bên phải, thêm thư mục tài nguyên của bạn bằng cách sử dụng nút Thêm thư mục. Khi bạn nhấn OK, bạn sẽ thấy một thư mục Tài nguyên trong dự án của bạn.

enter image description here

Bây giờ bạn có thể kéo các nguồn lực sử dụng dòng này hay cách tiếp cận tương tự:

MyClass.class.getResource("/main.jpg"); 

Nếu bạn đã tạo ra một gói phần mềm được gọi là hình ảnh trong thư mục nguồn, bạn có thể lấy các tài nguyên như thế này:

MyClass.class.getResource("/Images/main.jpg"); 
+1

i sử dụng phương pháp này nhưng tôi tìm thấy một hiệu ứng đáng lo ngại. sau khi xây dựng netbeans tải tất cả các nguồn lực bên trong bình, và tôi thực sự muốn các nguồn lực để ở lại trong bình! vì vậy có một giải pháp cho vấn đề này? –

+0

Thật không may, phương pháp tài nguyên java có thể không chính xác những gì bạn đang tìm kiếm. Tuy nhiên, nếu tệp của bạn nằm trong đường dẫn lớp, bạn có thể sử dụng ClassLoader.getSystemResource ("somefile.txt") ... bạn cũng sẽ không muốn bao gồm thư mục tài nguyên như đã nêu ở trên. Một tùy chọn khác là tìm trong thư mục mẹ của jar (hoặc đường dẫn tĩnh) cho một tệp đã cho (tài nguyên) và mở chúng bằng cách sử dụng Tệp hoặc một số tương đương khác để phù hợp với nhu cầu của bạn. Nếu tệp không tồn tại, hãy tạo tệp đó từ các tài nguyên được lưu trữ trong bình. Họ sẽ giống như các mẫu trong trường hợp này. –