2011-02-10 38 views
5

Tôi đang chạy một ứng dụng từ tệp jnlp có chứa thông tin hữu ích như nhà cung cấp, mô tả và trường khác.Lấy thông tin JNLP hiện tại

Cách hợp lý nhất để lấy dữ liệu này tại thời gian chạy là gì để xây dựng hộp thoại "Giới thiệu"?

Có cách nào để phát hiện ứng dụng đã được khởi chạy mà không có Java Web Start không?

Cảm ơn sự giúp đỡ của bạn.

Pierre

+1

Bất kỳ lý do nào bạn không thể nướng ứng dụng này cùng với tệp JNLP và mang nó từ đó? –

Trả lời

5

Có nhiều chiến lược khác nhau để đạt được mục tiêu mong muốn. Tôi sẽ không xem xét lại những người đã đề cập, nhưng thay vào đó phác thảo một số chi tiết.


1) Thông tin có thể được đặt trong tệp kê khai. Nó có thể được lấy bằng các phương thức của lớp java.lang.Package.

String title = pckg.getImplementationTitle(); 
String vendor = pckg.getImplementationVendor(); 
String version = pckg.getImplementationVersion(); 

lớp Các gói cũng có khả năng để xác định tất cả nạp gói.

Package[] package = Package.getPackages(); 

Lặp lại tìm kiếm gói của bạn và bạn có thể có danh sách tất cả các gói hiện đang được tải.

Cách tốt nhất để đưa thông tin vào tệp kê khai là sử dụng Ant hoặc một số công cụ xây dựng tương tự. Bằng cách đó, phiên bản có thể được đặt thành ngày - dễ thực hiện.


2) Thêm thuộc tính vào phần tài nguyên của JNLP.

<resources> 
    .. 
    <property name="jnlp.href" value="${href}" /> 
    .. 
</resources> 

BTW - sử dụng ${href} được dự định có nghĩa là cùng một chuỗi được sử dụng làm thuộc tính JNLP href.

Sử dụng phương thức BasicService.getCodeBase() để lấy mã cơ sở. Mẫu URL vào file JNLP sử dụng ..

URL urlToJnlp = new URL(
    basicService.getCodeBase(), 
    System.getProperty("jnlp.href")); 

tải file JNLP và phân tích nó bằng một trong những rất nhiều API XML của J2SE. (Và nếu nó không tải trong các API XML của J2SE, nó mạnh mẽ chỉ ra rằng nó không hợp lệ hoặc không đúng định dạng - và cần được kiểm tra bằng cách sử dụng một công cụ như JaNeLA.)

Khi nó được nạp và phân tích cú pháp, thông tin cơ bản có thể nhận được & được trình bày.

2

Bạn có thể phát hiện xem ứng dụng đã được khởi chạy bằng cách sử dụng webstart hay chưa bằng cách kiểm tra tính khả dụng của dịch vụ jnlp. Một cái gì đó như:

public boolean launchedByJNLP(){ 
    try { 
     ServiceManager.lookup("javax.jnlp.BasicService"); 
    } catch (UnavailableServiceException e) { 
     return false; 
    } 

    return true; 
} 

Như để nhận thông tin jnlp cho một Về thoại, tôi nghĩ rằng giải pháp tốt nhất của bạn là để bao gồm bất kỳ thông tin mà bạn muốn trong khoảng thoại của bạn trong một thuộc tính riêng biệt tập tin đóng gói với ứng dụng của bạn.

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