2011-11-12 33 views
5

Nếu bạn chưa bao giờ chơi Minecraft, thì đây là cách cơ chế của trình khởi chạy hoạt động.Điều gì là cần thiết để khởi chạy các tệp JAR bên ngoài, như trình khởi chạy Minecraft?

Người dùng có thể tải xuống JAR (Hoặc một JAR được đóng gói thành EXE), hoàn toàn không có mã cho ứng dụng Minecraft. Đây được coi là trình khởi chạy. Khi khởi chạy trình khởi chạy, nó sẽ hiển thị một màn hình đăng nhập với tin tức vv. Sau đó, sau khi đăng nhập, trình khởi chạy sẽ chạy lõi Minecraft chính, minecraft.jar. Nếu nó không có trên hệ thống, nó sẽ tải xuống. Trình khởi chạy Minecraft không cần bất kỳ thư viện Java bên ngoài nào để chạy.

Làm cách nào để thực hiện việc này?

Tôi hiện đang cố gắng sao chép chức năng, khi tôi xuất dưới dạng JAR có thể chạy trong Eclipse, khi tôi thử chạy nó, nó sẽ in "Không thể tìm thấy lớp launcher.jar chính. Chương trình sẽ thoát" (điều này là trên bàn điều khiển, tôi muốn có thể nhấp đúp vào JAR và khởi chạy nó)

File file = new File(System.getProperty("user.dir") + "/lessur.jar"); 
System.setProperty("org.lwjgl.librarypath", System.getProperty("user.dir") + "natives"); 
URLClassLoader classLoader; 
classLoader = URLClassLoader.newInstance(new URL[]{file.toURI().toURL()});   
classLoader.loadClass("zombie.engine.Lighting2").newInstance(); 

Trả lời

3

JAR chạy cần một Tệp kê khai cho biết lớp chính cần sử dụng. Trong khi xuất từ ​​nhật thực, một tùy chọn là chọn một cấu hình chạy (từ một lần chạy thử nghiệm trước đó) và nhật thực sử dụng thông tin đó để điền vào tệp kê khai.

Cập nhật: Sau khi suy nghĩ về nó nhiều hơn một chút, dựa trên đầu ra ở trên và bình luận bên dưới, tôi đoán là bạn đang cố chạy bình bằng lệnh 'java' từ dòng lệnh. Nếu đúng như vậy, bạn cần phải sử dụng:
java -jar launcher.jar
không:
java launcher.jar

Đây là một bản tái tạo của những gì tôi nghĩ rằng bạn thấy:

C:\Users\Tim\Desktop>java launcher.jar
Exception in thread "main" java.lang.NoClassDefFoundError: launcher/jar Caused by:
java.lang.ClassNotFoundException: launcher.jar
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: launcher.jar. Program will exit.

C:\Users\Tim\Desktop>java -jar launcher.jar
Ran

+0

Tôi đã thực hiện việc này, đây là nội dung của MANIFEST.MF từ JAR đã xuất - Manifest-Version: 1.0 C lass-Path:. Main-Class: Main – liamzebedee

+0

Có lẽ bạn có một lớp được gọi là 'Main.class' (không có gói) trong JAR đó và lớp đó chứa một hàm' main' được định dạng đúng? –

+0

Có, tôi thực sự là – liamzebedee

1
// Use the File constructor that will insert the correct separator for the OS 
File file = new File(System.getProperty("user.dir"), "lessur.jar"); 
System.out.println("File exists: " + file.exists()); 
File libs = new File(System.getProperty("user.dir"), "natives"); 
System.out.println("Libs exists: " + libs.exists()); 
System.setProperty("org.lwjgl.librarypath", libs.toString()); 
Các vấn đề liên quan