2013-03-17 36 views
0

我试图制作一个我最喜欢的Java游戏之一的JFrameable“Loader”,但我不知道如何将实际的.Jar加载到JFrame面板(我被告知这被称为Applet,猜测我后面有点)在JFrame(面板)中加载一个.Jar Applet

我有JFrame设置面板和一切我想要它,但我不知道如何去加载.jar并向它发送参数并告诉它我想要的位置。

任何帮助或链接将不胜感激......因为我无法找到任何

+1

要加载jar,请使用'URLClassLoader'。然后,为了得到applet的一个实例,从类加载器中通过名称获得类,并使用'Class#newInstance()'。为了处理参数,代码库等,你需要定义一个实现'AppletStub'和'AppletContext'的类,并且在那个类中返回必要的参数(从网站或从哪里加载)。使用'Applet#setStub(AppletStub)'将小程序的存根设置为自定义存根的一个实例,然后简单地调用'Applet#init()'和'Applet#start()',最后将它添加到' JFrame的内容窗格。 – Vulcan 2013-03-17 23:29:02

+0

*“我试图制作一款我最喜欢的Java游戏之一的JFrameable”Loader“*为什么?你是否意识到一个applet通常可以通过使用[JWS](http://stackoverflow.com/tags/java-web-start/info)启动而自由浮动?什么是(小程序的)URL? – 2013-03-18 04:49:48

+0

@AndrewThompson一个原因可能是提供与游戏相关的工具/自动化,因此有必要将游戏“包装”在单独的应用程序中。 – Vulcan 2013-03-18 07:29:08

回答

1

由于您没有提供正在使用我只解释一些地区的网站。

首先,您需要下载游戏.JAR文件或让它可以访问。

其次,您需要掌握主类的知识,通常称为“main.class”。

第三,您需要类似于下面的代码才能加载.jar文件主文件。再次将“main.class”变量改为实际的“.class”。

URL url[] = { 
    new File(directory.concat("/gamepack.jar")).toURI().toURL() 
}; 

URLClassLoader classLoader = new URLClassLoader(url); 
applet = (Applet)classLoader.loadClass("main").newInstance(); 
applet.setBounds(0, 0, width, height); 

applet.setBackground(Color.BLACK); 
applet.setStub(stub); 

applet.init(); 
applet.start(); 

mainFrame.getContentPane().add(applet); 

您会注意到方法“applet.setStub(stub)”。你需要创建一个AppletStub类。类似于下面的东西就足够了。

package com; 

import java.util.Map; 
import java.util.HashMap; 
import java.net.URL; 
import java.applet.AppletStub; 
import java.applet.AppletContext; 

public class AppletEnvironment implements AppletStub 
{ 
private final Map<String, String> PARAMETERS = new HashMap<String, String>(); 
private final URL URLBASE; 

public AppletEnvironment(final URL URLBASE) 
{ 
    this.URLBASE = URLBASE; 
} 

public boolean put(String key, String param) 
{ 
    if (PARAMETERS.containsKey(key)) 
     return false; 
    PARAMETERS.put(key, param); 
    return true; 
} 

@Override 
public String getParameter(String name) 
{ 
    return PARAMETERS.get(name); 
} 

@Override 
public URL getCodeBase() 
{ 
    return URLBASE; 
} 

@Override 
public URL getDocumentBase() 
{ 
    return URLBASE; 
} 

@Override 
public boolean isActive() 
{ 
    return true; 
} 

@Override 
public AppletContext getAppletContext() 
{ 
    return null; 
} 

@Override 
public void appletResize(int width, int height) 
{ 

} 
} 

现在为了让这个类工作,你需要类似下面的东西。所以你可以创建“存根”变量。

AppletEnvironment stub = new AppletEnvironment(url); 

你会注意到AppletEnvironment类有一个方法, “把(String键,字符串PARAM)”。这必须正确完成。当你解析网站时,你会发现有用于生成客户端的客户端参数。如果没有发现,那么你可以忽略这一点。如果你想看看需要什么。

然后将下面的代码添加到“getParameter(String name);”方法。

System.out.println(name);