2008-09-13 35 views
5

Nếu tôi đang chạy một Java applet đã ký, tôi có thể tải các lớp bổ sung từ các nguồn từ xa (trong cùng một miền, thậm chí có cùng một máy chủ) và chạy chúng không?tải các lớp Java từ một applet đã ký

Tôi muốn làm điều này mà không cần thay đổi trang hoặc thậm chí là dừng ứng dụng hiện tại. Tất nhiên, tổng kích cỡ của tất cả các lớp quá lớn để tải tất cả chúng cùng một lúc.

Có cách nào để thực hiện việc này không? Và có cách nào để làm điều này với các applet đã ký và giữ nguyên trạng thái "tự tin" của chúng?

Trả lời

5

Tôi nghĩ rằng các lớp học được tải chậm trong các applet. được tải theo yêu cầu.

Dù sao, nếu các lớp nằm ngoài một cái bình, bạn chỉ cần sử dụng trình nạp lớp applet và tải chúng theo tên. Ví dụ:

ClassLoader loader = this.getClass().getClassLoader(); 
Class clazz = loader.loadClass("acme.AppletAddon"); 

Nếu bạn muốn tải các lớp học từ một jar Tôi nghĩ rằng bạn sẽ cần phải tạo một đối tượng mới của URLClassLoader với url (s) của jar (s).

URL[] urls = new URL[]{new URL("http://localhost:8080/addon.jar")}; 
URLClassLoader loader = URLClassLoader.newInstance(urls,this.getClass().getClassLoader()); 
Class clazz = loader.loadClass("acme.AppletAddon"); 

Theo mặc định, applet không được phép tạo trình nạp lớp mới. Nhưng nếu bạn đăng nhập vào applet của bạn và bao gồm quyền tạo các trình nạp lớp mới, bạn có thể làm điều đó.

+0

Cảm ơn bạn, URLClassLoader có vẻ giống như những gì tôi muốn. Tôi chỉ cần đảm bảo rằng tôi có thể giữ nguyên chuỗi ký kết. –

+1

Nó hoạt động sau khi applet cha mẹ (loader) được ký. Nhưng những đứa trẻ (nạp) lọ, mặc dù chúng được ký, không nhận được quyền bảo mật. –

0

Có vẻ như có thể (nhưng tôi chưa bao giờ thực hiện). Bạn đã có một cái nhìn tại Gọi phương pháp từ xa (RMI) chưa?

+0

RMI không phải là hướng tôi đang tìm kiếm, nhưng dù sao cũng được. –

2

Có, bạn có thể mở các kết nối URL tới máy chủ lưu trữ mà bạn đã chạy applet của mình. Bạn có thể tạo một trình nạp lớp với các url HTTP hoặc tải xuống các lớp (như các lọ) vào máy của người dùng và tạo một trình nạp lớp với các jars đó trong đường dẫn lớp. Các applet sẽ không dừng lại và bạn không cần phải tải một trang khác.

Về phần thứ hai của câu hỏi về sự tự tin, khi người dùng đã cấp quyền truy cập vào applet của bạn, nó có thể tải xuống mọi thứ, vâng, bất cứ điều gì, nó muốn máy cục bộ. Bạn có thể có thể thông báo cho người dùng về những gì nó đang làm, nếu thiết kế giao diện người dùng của bạn cho phép điều này.

Hy vọng điều này sẽ hữu ích.

+0

Tuyệt vời, cảm ơn bạn. Tôi ước tôi có thể chấp nhận/hợp nhất cả hai câu trả lời. –

+0

Thật không may, như tôi đã nhận xét về câu trả lời của jassuncao, applet được tải cho đến nay không có quyền thích hợp. –

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