2010-09-15 35 views
29

Tôi đã tìm kiếm phương pháp nhúng tài nguyên vào một dự án java (sử dụng Eclipse v3.6.0) rồi sử dụng tài nguyên được nhúng đó trong một điều khiển (ví dụ: JLabel). Tôi đã thấy các phương pháp tham chiếu tài nguyên từ hệ thống tệp. Khi dự án đã được phát triển, tôi muốn xuất bản ứng dụng dưới dạng tệp thực thi. Cần lưu ý rằng các tệp thực thi này sẽ được triển khai/khởi chạy cho các nền tảng Windows, * NIX và Linux.Nhúng tài nguyên (hình ảnh, âm thanh, vv) vào một dự án Java rồi sử dụng các tài nguyên đó

Tôi biết điều này có thể được thực hiện trong thế giới Visual Studio, nhưng tôi rất không quen thuộc cách thực hiện điều này trong Java/Eclipse IDE. Là một câu hỏi phụ, làm thế nào để tôi có được Eclipse để tạo dự án như là một tệp thực thi để nó có thể được khởi chạy?

Bất kỳ trợ giúp nào được đánh giá cao.

Đánh dấu

UPDATE 1:

Dựa trên BalusC's response, tôi muốn chia sẻ mã tôi phải giải quyết vấn đề của tôi. Các lớp học của tôi nằm trong gói "Viking.Test" và sau đó tôi đã đặt tệp hình ảnh trong gói "Viking.Test.Resources". Tất cả điều này được thực hiện trong Eclipse để nhập hình ảnh vào dự án.

  1. Tôi đã nhập hình ảnh bằng cách nhấp chuột phải vào Dự án -> Nhập -> Chung/Hệ thống tệp cho nguồn nhập.
  2. chọn thư mục có chứa các hình ảnh để nhập khẩu
  3. chọn "Project/src/Viking/Test/Resources" cho 'Into thư mục' tham số
  4. Không thay đổi bất kỳ tùy chọn và nhấp "Finished"

Trong tệp nguồn tôi đã thêm mã sau đây để chèn hình ảnh vào một JLabel (LblLogo)

try 
{ 
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
    InputStream input = classLoader.getResourceAsStream(
    "Viking/Test/Resources/MyImage.jpg"); 
    Image logo = ImageIO.read(input); 
    LblLogo = new JLabel(new ImageIcon(logo)); 
    LblLogo.setBounds(20, 11, 210, 93); 
    getContentPane().add(LblLogo); 
} 
catch (IOException e) { } 

Trả lời

17

Chỉ cần đặt các tài nguyên đó vào cấu trúc nguồn/gói và sử dụng ClassLoader#getResource() hoặc getResourceAsStream() để lấy chúng dưới dạng URL hoặc InputStream từ đường dẫn lớp theo đường dẫn gói đủ điều kiện.

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
InputStream input = classLoader.getResourceAsStream("/image.gif"); 
// ... 

Hoặc nếu nó nằm trong gói này tương tự như các lớp hiện tại, bạn cũng có thể có được nó như sau:

InputStream input = getClass().getResourceAsStream("image.gif"); 

Như một câu hỏi phụ, làm thế nào để tôi nhận được Eclipse để tạo dự án dưới dạng tệp thực thi để có thể khởi chạy.

Rightclick Java Project> Xuất> Tệp JAR Runnable.

+0

Cảm ơn BalusC, đã hoạt động. Một điều kỳ lạ là Dự án Java Nhấp chuột phải -> Xuất -> Tệp JAR Runnable hoạt động trên một máy, nhưng không hoạt động trên một máy khác.Máy không hoạt động trên tôi có thể đưa ra lệnh "java -jar MyJarFile.jar" và nó sẽ chạy. Trong quá trình xuất, nếu tôi chọn "Thư viện yêu cầu gói vào JAR được tạo", tôi nhận được thông báo lỗi "Không thể tìm thấy lớp chính. Chương trình sẽ thoát". Cần phải tìm ra lý do tại sao và tôi không hiểu nó. – lordhog

+0

Một số thứ đã thay đổi kể từ Eclipse 3.5. Phiên bản nào đang chạy ở máy? Dễ nhất là để thực hiện nó một lần bằng cách sử dụng Ctrl + F11 để nó được lưu như cuối * Run As * cấu hình mà bạn có thể chọn trong khi xuất khẩu. – BalusC

+0

Được rồi, ở nhà tôi đã chạy Java v6 Update 21 và Java v6 Update 20 trên máy không hoạt động. Tôi không thấy lý do tại sao điều đó sẽ gây ra bất kỳ mối lo ngại nào, nhưng tôi đã gỡ cài đặt Java và cài đặt lại Java. Sau khi tôi cài đặt lại Java, tôi đã có thể bấm đúp và tệp jar được thi hành. Mát mẻ. Tôi không chắc vấn đề là gì. Bây giờ mối quan tâm khác là ngay cả khi tôi đóng cửa sổ, một thể hiện của 'javaw.exe' vẫn đang chạy. Cậu bé, tôi phải làm quen với điều Java này. Cảm ơn tất cả sự giúp đỡ của BalusC! – lordhog

Các vấn đề liên quan