2010-06-22 35 views
6

Vì vậy, tôi đã gặp sự cố hôm nay trong khi làm việc trên chương trình Android của mình. Tôi có một lớp học có thể biến rằng một chuỗi XML vào một đối tượng Java (bên thứ ba) và nó hoạt động tốt trong như một dự án java bình thường nhưng trên Android tôi nhận được lỗi lạ này:ClassNotFoundException Android

 
06-21 22:44:26.402: DEBUG/App(259): java.lang.ClassNotFoundException: com.package.mycode.Class in loader [email protected] 
06-21 22:44:26.402: DEBUG/App(259):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 

Tôi giấu tên ứng dụng của tôi và gói của tôi vì lý do rõ ràng nhưng tôi đã tự hỏi nếu có ai gặp phải vấn đề như thế này. Lớp học nằm trong gói đúng, đó là thư viện mà tôi đã thêm vào. Các lớp khác mà tôi tham khảo trước đó và những thứ đó có thể được tạo ra. Có bất kỳ lý do nào khác khiến ClassNotFoundException bị ném không?

Cảm ơn, Jake

+0

Tôi không biết điều đó có nghĩa là gì> _ < – jakehschwartz

Trả lời

9
private static void fixClassLoaderIssue() 
{ 
    ClassLoader myClassLoader = MyClass.class.getClassLoader(); 
    Thread.currentThread().setContextClassLoader(myClassLoader); 
} 

Đây là mã tôi hiện có mà tôi tin rằng đã khắc phục sự cố này. MyClass chỉ là một lớp tôi có trong dự án của tôi. Như tôi đã nói, một đồng nghiệp đã cho tôi thấy nó, nhưng có vẻ khá thẳng về phía trước.

+0

cảm ơn bạn đã chia sẻ điều đó. –

+0

Bạn gọi từ đâu? – jjnguy

+0

Tôi gọi nó trong hàm khởi tạo mặc định của lớp ứng dụng của tôi. – jakehschwartz

0

Are there any other reasons a ClassNotFoundException is thrown?

IIRC, nó cũng có thể được ném ra nếu một số lớp khác trong sự phụ thuộc tĩnh của "com.package.mycode.Class" không thể được nạp, hoặc nếu có một vấn đề trong khi khởi tạo tĩnh. Nhưng những điều này sẽ hiển thị dưới dạng ngoại lệ lồng nhau ... lần đầu tiên bạn cố gắng tải lớp học.

0

Android không có sẵn tất cả các lớp Java sẵn có trên máy bình thường. Có một số lớp bị thiếu có thể gây ra lỗi này. Nhưng điều này nên đã được hiển thị tại thời gian biên dịch. Hãy xem số list này để xem lớp nào được hỗ trợ và không được hỗ trợ.

Một lần nữa tôi chỉ đoán vì trình biên dịch sẽ thấy các lớp bị thiếu.

+0

Tôi không có bất kỳ lớp nào khác được nhập hoặc dựa vào đó không được hỗ trợ. Và tệp đang cố gắng tải là một phần của tệp jar tôi đã tạo để nó biên dịch tốt với các tệp jar khác. Tôi hy vọng tôi có ý nghĩa của bạn là – jakehschwartz

+0

Bạn đã đặt tệp jar này vào dự án Android của mình ở đâu? – Janusz

0

Đối với ứng dụng android, tôi muốn cùng một sự cố với tệp jar bên ngoài. Trong trường hợp của tôi, giải pháp là di chuyển cái lọ từ thư mục "lib" sang thư mục "libs" mặc định của android.

Khi bình trong thư mục lib (cũng được thêm vào đường dẫn xây dựng), trong khi không có vấn đề về xây dựng trong Eclipse, ứng dụng đã đưa ra ClassNotFoundException khi chạy. Khi tôi di chuyển jar sang thư mục "libs", jar bắt đầu xuất hiện trong "Android Dependencies" và ứng dụng bắt đầu hoạt động tốt.

Đây là một số cuộc thảo luận khác về cùng một chủ đề.

Adding a library/JAR to an Eclipse Android project

Android: What is the folder name of the jar files (LIB or LIBS)?

How to specify lib folder for JARs when using Android-generated ant build file?

0

tôi đã có một vấn đề bắt đầu một aynctask. nó được sử dụng để hoạt động tốt nhưng sau đó tôi đã thêm

line = StringEscapeUtils.unescapeHtml4(line); 

(thư viện commons.apache.org) vào asynctask sau đó rất nhiều vấn đề. nó biên dịch ok nhưng khi tôi cố gắng chạy, nó nói lớp không tìm thấy trên lớp asynctask của tôi. nhưng tôi nhấn tiếp tục nó tiếp tục đi trong nhiệm vụ không đồng bộ, sau đó nó đã chết.

vì vậy tôi đoán vấn đề là StringEscapeUtils không được cài đặt đúng cách, nhưng tôi không có cách nào để tìm ra từ các thông báo lỗi tôi đã nhận được.

0

Are there any other reasons a ClassNotFoundException is thrown?

Trong trường hợp của tôi, tôi nhận được ClassNotFoundException cho hoạt động chính khi xây dựng gói ứng dụng với nhật thực nhưng không gặp vấn đề gì khi xây dựng với con quạ.

Vấn đề là hoạt động chính của tôi là triển khai giao diện từ một dự án java đơn giản "thư viện POJO". Trong dự án Android> Thuộc tính> Đường dẫn xây dựng Java> Đặt hàng và xuất, tôi phải đánh dấu vào hộp để xuất "Thư viện POJO". Sau khi làm sạch dự án, giao diện được bao gồm trong classes.dex trong gói ứng dụng và vấn đề đã được giải quyết.

Tôi đã được hướng dẫn ở đây khi cố gắng hiểu vấn đề và tôi hy vọng nó sẽ giúp người khác trong cùng một tình huống.

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