0

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

我已经JFrame设置了面板和我想要的所有东西,但我不知道如何去加载 .jar 并向它发送参数并告诉它我想要它在哪里。

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

4

1 回答 1

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 类有一个方法“put(String key, String param)”。这必须正确完成。当您解析网站时,您会发现有用于生成客户端的客户端参数。如果没有找到,那么您可以忽略它。如果你想看看需要什么。

然后在“getParameter(String name);”中添加如下代码 方法。

System.out.println(name);
于 2013-04-19T01:32:28.660 回答