2013-03-17 2 views
0

Я пытаюсь создать JFrameable «загрузчик» одной из моих любимых игр Java, но я не знаю, как загрузить фактический .Jar в JFrame (мне сказали, что это называется апплетом, думаю, я немного отстаю)Загрузка апплета .Jar в JFrame (панель)

У меня есть JFrame с панелями и всем, где я хочу, но я понятия не имею, как погрузить .jar и отправить ему параметры и сообщить, где я хочу, чтобы он находился.

Любая помощь или ссылки будут с благодарностью ... как я не могу найти что-нибудь

+1

Чтобы загрузить банку, используйте 'URLClassLoader'. Затем, чтобы получить экземпляр апплета, получите класс по имени из загрузчика классов и используйте 'Class # newInstance()'. Чтобы обрабатывать параметры, базу кода и т. Д., Вам нужно определить класс, реализующий «AppletStub» и «AppletContext», и в этом классе вернуть необходимые параметры (загруженные с веб-сайта или где-либо). Установите заглушку апплета на экземпляр вашего настраиваемого заглушки, используя 'Applet # setStub (AppletStub)', а затем просто вызовите 'Applet # init()' и 'Applet # start()' и, наконец, добавьте его в свой ' Область содержимого JFrame'. – Vulcan

+0

* «Я пытаюсь создать JFrameable« загрузчик »одной из моих любимых игр Java» * Почему? Вы понимаете, что апплет обычно можно бесплатно плавать, просто запустив его с помощью [JWS] (http://stackoverflow.com/tags/java-web-start/info)? Что такое (URL-адрес) апплета? –

+0

@AndrewThompson Одна из причин может заключаться в предоставлении инструментов/автоматизации, связанных с игрой, что делает необходимым «обернуть» игру в отдельном приложении. – Vulcan

ответ

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 (заглушка)". Вам нужно будет создать класс 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); 
Смежные вопросы