6

我想在我的 Swing 应用程序中嵌入一个第三方小程序。基本上,我希望它只是另一个面板。这个小程序使用了许多参数,例如

final String config_filename = getParameter(XXX);

我看过很多关于如何通过 HTML 发送参数值的文档,但是你如何通过代码(或者可能是属性文件)来做到这一点?任何帮助,将不胜感激!

4

2 回答 2

14

Implement an AppletStub & set it as the stub of the applet instance. E.G.

/*
<applet code='ParamApplet' width='200' height='200'>
<param name='param' value='foo'>
</applet>
*/
import java.applet.*;
import javax.swing.*;
import java.net.URL;
import java.util.HashMap;

public class ParamApplet extends JApplet {

    public void init() {
        String param = getParameter("param");
        System.out.println("parameter: " + param);
        add(new JLabel(param));
    }

    public static void main(String[] args) {
        ApplicationAppletStub stub = new ApplicationAppletStub();
        stub.addParameter(args[0], args[1]);
        ParamApplet pa = new ParamApplet();
        pa.setStub(stub);

        pa.init();
        pa.start();
        pa.setPreferredSize(new java.awt.Dimension(200,200));
        JOptionPane.showMessageDialog(null, pa);
    }
}

class ApplicationAppletStub implements AppletStub {

    HashMap<String,String> params = new HashMap<String,String>();

    public void appletResize(int width, int height) {}
    public AppletContext getAppletContext() {
        return null;
    }

    public URL getDocumentBase() {
        return null;
    }

    public URL getCodeBase() {
        return null;
    }

    public boolean isActive() {
        return true;
    }

    public String getParameter(String name) {
        return params.get(name);
    }

    public void addParameter(String name, String value) {
        params.put(name, value);
    }
}

Typical I/O

prompt>java ParamApplet param "apples & oranges"
parameter: apples & oranges

prompt>java ParamApplet param 42
parameter: 42

prompt>
于 2011-05-25T21:34:55.810 回答
7

对于完整的小程序环境,您必须实现AppletContextAppletStub(请参阅Andrew 的答案以获取最小示例),然后在setStub使用构造函数创建实例后将最后一个传递给您的小程序。您还应该注意调用小程序的生命周期方法init()、、start()stop()destroy()在设置小程序存根之后)。

Applet.getParameter()方法只是委托给小程序存根,因此在您的特殊情况下,仅实现 AppletStub(它所需的方法)并传递它,省略 AppletContext 可能就足够了。您也可能在不调用部分甚至全部生命周期方法的情况下侥幸逃脱。

于 2011-05-25T21:09:11.147 回答