2012-07-16 44 views
5

Có thể tải một lớp từ tệp jar và sau đó tạo một đối tượng từ nó không?Java - Tạo một Lớp từ một Tệp Jar

Lưu ý: Tệp jar không có ở đó khi chương trình được biên dịch, nhưng được thêm bởi người dùng sau và được tải khi người dùng khởi động chương trình.

Mã của tôi giống như sau: Người dùng có tệp jar không có gì ngoài một lớp java được biên dịch trong đó. Người dùng sau đó đặt tệp jar này vào một thư mục và bắt đầu chương trình của tôi, xem qua thư mục và tìm tệp jar này. Sau đó nó tải tệp jar này và tạo một lớp từ nó, sau đó nó tạo một đối tượng từ đó và thêm nó vào một mảng.

Tôi có mọi thứ ngoại trừ việc tạo lớp học từ tệp jar (được tải dưới dạng tệp java.io) và sau đó tạo và đối tượng từ lớp đó.

Bất kỳ trợ giúp nào? Cảm ơn.

Trả lời

4

Bạn đang tìm kiếm các phương thức Class#forNameClass#newInstance.

This link cung cấp một ví dụ tốt về khởi tạo một lớp biết tên của nó (được chiết xuất từ ​​liên kết):

Class c = Class.forName("com.xyzws.AClass"); 
AClass a = (AClass)c.newInstance(); 

Một ví dụ điển hình cho những tình huống này là sử dụng JDBC (như liên kết cũng chỉ ra), bởi vì bạn khởi tạo một đối tượng của trình điều khiển động cơ db mà bạn muốn kết nối. Hãy nhớ rằng trình điều khiển này xuất phát từ một jar được nhập vào dự án của bạn, nó có thể là một cái jar cho MySQL, Oracle hoặc MSSQL Server, bạn chỉ cần cung cấp tên lớp trình điều khiển và cho JDBC API và jar xử lý công việc SQL.

Class.forName("org.gjt.mm.mysql.Driver"); 
Connection con = DriverManager.getConnection(url, "myLogin", "myPassword"); 

Ngoài ra, đối với vấn đề cụ thể này tải jar động, có những câu hỏi và câu trả lời:

0

Một đơn giản hơn? cách để người dùng đặt tệp jar vào đường dẫn lớp.
Bằng cách đó mã của bạn sẽ có quyền truy cập vào các lớp đó sẽ được nạp bởi JVM

Edit: Ngay cả @ câu trả lời Luiggi của giả định rằng jar là trong classpath

+1

nhưng ý tưởng là người dùng làm cho jar được đưa vào chương trình, không phải anh ấy –

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