Java 启动外部JAR文件(如Minecraft启动器)需要什么?

Java 启动外部JAR文件(如Minecraft启动器)需要什么?,java,jar,external,launcher,minecraft,Java,Jar,External,Launcher,Minecraft,如果你从来没有玩过雷舰,那么这就是发射器的工作原理 用户可以下载一个JAR(或打包成EXE的JAR),它完全没有Minecraft客户端的代码。这被认为是发射器。当启动器启动时,它会显示一个带有新闻等的登录屏幕。然后,在登录之后,启动器会运行主Minecraft核心,Minecraft.jar。如果系统上不存在,它将下载它。 Minecraft启动器也不需要任何外部Java库来运行 它是如何做到这一点的 我目前正在尝试复制该功能,但是,当我在Eclipse中导出为可运行的JAR时,当我尝试启动它

如果你从来没有玩过雷舰,那么这就是发射器的工作原理

用户可以下载一个JAR(或打包成EXE的JAR),它完全没有Minecraft客户端的代码。这被认为是发射器。当启动器启动时,它会显示一个带有新闻等的登录屏幕。然后,在登录之后,启动器会运行主Minecraft核心,Minecraft.jar。如果系统上不存在,它将下载它。 Minecraft启动器也不需要任何外部Java库来运行

它是如何做到这一点的

我目前正在尝试复制该功能,但是,当我在Eclipse中导出为可运行的JAR时,当我尝试启动它时,它会打印“找不到main class launcher.JAR。程序将退出”(在控制台上,我希望能够双击JAR并启动它)


可运行JAR需要一个指示要使用的主类的清单。从eclipse导出时,一个选项是选择一个运行配置(例如,从以前的测试运行中),eclipse使用该信息填充清单

更新:仔细考虑之后,根据上面的输出和下面的注释,我猜您正在尝试从命令行使用“java”命令运行jar。如果是这种情况,则需要使用:
java-jar启动器.jar

不是:
java启动器.jar

这是我想你看到的复制品:

C:\Users\Tim\Desktop>javalauncher.jar
线程“main”java.lang.NoClassDefFoundError中出现异常:启动器/jar由以下原因引起:
java.lang.ClassNotFoundException:launcher.jar
在java.net.URLClassLoader$1.run(未知源代码)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
在sun.misc.Launcher$AppClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
找不到主类:launcher.jar。程序将退出。

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


您应该尝试一个

我已经这样做了,下面是导出的JAR中MANIFEST.MF的内容-MANIFEST版本:1.0类路径:。Main Class:Main假设您在该JAR中有一个名为
Main.Class
(没有包)的类,并且该类包含一个格式正确的
Main
函数?好的,您是双击launcher.JAR文件还是尝试使用“java”命令行运行它?我猜是后一种。我已经更新了我的答案。我双击它,它不会产生任何输出,然后通过命令行启动它来调试所发生的事情。您是否使用我提到的
-jar
选项启动它
java-jar启动器.jar
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();
// 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());