2010-02-24 36 views
5

Tôi nhận được ff. lỗi trong Java Bảng điều khiển thỉnh thoảng mới:Trình nạp lớp Applet không thể tìm thấy một trong các lớp trong jar

Exception in thread "thread applet-my.package.MyApplet-10" java.lang.NoClassDefFoundError: another/package/SomeClass 
    at my.package.MyApplet.init(MyApplet.java:95) 
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: another.package.SomeClass 
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
    ... 3 more 
Caused by: java.io.IOException: open HTTP connection failed:https://myserver/mycontext/applets/another/package/SomeClass.class 
    at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source) 
    at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source) 
    at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    ... 7 more 

thẻ Applet của tôi là như sau:

<applet codebase="../../applets" code="my.package.MyApplet" class="invisible" id="myApplet"> 
    <param value="value0" name="param0"/> 
    ... 
    <param value="valueN" name="paramN" /> 
    <param value="folder/myApplet__0.0.1177.jar,folder/commons-io-1.3.2__0.0.1177.jar,..." name="cache_archive"/> 
    <param value="0.0.1177.0,0.0.1177.0,...," name="cache_version"/> 
</applet> 

Điều quan trọng là tôi nhấn mạnh từ "thỉnh thoảng". Đôi khi applet được khởi tạo mà không bị cản trở. Điều này cũng có nghĩa là, thường, khi trình duyệt được khởi động lại, sự cố sẽ biến mất.

Tôi biết về applet fails to load class from jarApplet class loader cannot find a class in the applet's jar nhưng tôi nghĩ rằng chúng không áp dụng cho trường hợp của tôi. SomeClass và MyApplet nằm trong cùng một lọ và trang đang được truy cập cục bộ.

+0

Tôi nghĩ điều xảy ra là trình cắm Java của trình duyệt không thể tải lớp từ myApplet__0.0.1177.jar và vì vậy đã đi tìm nó trong thư mục codebase. Câu hỏi đặt ra là làm thế nào là nó có thể tải MyApplet nhưng không phải là SomeClass? –

+0

Phiên bản Java nào được sử dụng ở phía máy khách? – uthark

+0

Bạn đã nói rằng trang đang được truy cập cục bộ, nhưng trong nhật ký tôi thấy "myserver". Đây có phải là tên máy cục bộ của bạn không? Ngoài ra, bạn sử dụng trình duyệt nào để kiểm tra? Internet explorer, firefox? – uthark

Trả lời

1
Caused by: java.io.IOException: open HTTP connection failed:https://myserver/mycontext/applets/another/package/SomeClass.class 

Có vẻ như có sự cố kết nối với truy xuất tệp jar từ máy chủ HTTPS.

Tôi không biết chính xác bạn đang chạy phiên bản Java nào, nhưng bạn có thể kiểm tra nguyên nhân của lỗi liên quan đến vấn đề của bạn here.

Nếu đây không phải là vấn đề, hãy đảm bảo rằng có đủ bộ nhớ đệm cho tệp JAR của bạn khi được tải xuống khác không thể khởi chạy. Nó không phải là vấn đề mã không may.

CẬP NHẬT Lớp học của bạn SomeClass có truy cập bất kỳ cơ sở dữ liệu hoặc máy chủ từ xa nào không?

Ngoại lệ cho thấy rõ ràng rằng có một đặc quyền AccessControl đã bị từ chối.

at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source) 
    at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source) 
    at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 

Gấu trong tâm trí, mà applet là như Flash Objects:

  • Họ đều tải về và chạy từ phía khách hàng.

Chỉ khác biệt là Applet được thiết kế với rất nhiều các quy tắc kiểm soát truy cập như, nó không phải kết nối với máy chủ ẩn đằng sau công ty DMZ (De-Militarized Zone) vv

Nếu đó là trường hợp, Tôi đề nghị bạn tìm cách lấy dữ liệu của bạn bên ngoài các applet (thử servlet?)

CẬP NHẬT 2 Có vẻ như JVM không thể tìm thấy chứng chỉ tin cậy để khớp với bình đã ký của bạn.

  1. Kể từ file jar của bạn là chắc chắn rằng file jar có thể chỉ chứng chỉ tin cậy của bạn (hãy nhớ, nó phải được tin cậy).
  2. biết thêm thông tin, kiểm tra: http://faq.javaranch.com/java/HowCanAnAppletReadFilesOnTheLocalFileSystemhttp://www.developer.com/article.php/3303561
+0

Nếu đó là sự cố kết nối, thay vào đó URL trong thông báo ngoại lệ là https: // myserver/mycontext/applets/myApplet__0.0.1177.jar? Dường như trình cắm đang tìm kiếm tệp lớp đó trong codebase. –

+0

Kiểm tra bài đăng cập nhật của tôi. –

+0

SomeClass không truy cập bất kỳ máy chủ hoặc cơ sở dữ liệu từ xa nào. Đó là, tuy nhiên, đọc các tập tin từ hệ thống tập tin địa phương. Tôi đã bọc nó trong một cuộc gọi đặc quyền. Tôi cũng đã ký các lọ. Tôi nghĩ trình cắm Java của trình duyệt đang thực hiện quyền truy cập đặc quyền. –

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