繁体   English   中英

如何用已加载的类扩展Java类?

[英]How to extend a Java class with a loaded class?

我正在以无法检查它是哪个网站的方式注入Applet。
目的是将外部未修改的applet加载到我的小程序中,这样我就可以将其嵌入我的小程序中了。

    final URL[] appletURL = { new URL(Main.getBase() + "/loader.jar") };
    final URLClassLoader classLoader = new URLClassLoader(appletURL); // gets the class
    final Class<?> loader = classLoader.loadClass("loader"); // loads the class
    applet = (Applet) loader.newInstance(); // creates the applet
    applet.setStub(new Injector()); // injects the getdocumentbase, so it thinks he is on his own website
    applet.init(); // start applet
    applet.start();
    applet.setPreferredSize(new Dimension(800, 600)); // to be able to add to jframe properly

“ applet.setStub(new Injector());” 部分是为了防止导航或不加载,因为它不是applet自己的网站。
但是现在我想将外部小程序渲染为屏幕截图。 我尝试了这个:

@Override
public void actionPerformed(final ActionEvent e) {
    final String s = e.getActionCommand();
    if (s.equals("Screenshot")) {
        final BufferedImage offScreen = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
        applet.update(offScreen.createGraphics());
        try {
            ImageIO.write(offScreen, "PNG", new File("C:/Users/Mitchell/Pictures/screenshot.png"));
        } catch (Exception ex) {  }
    }
}

但是它既不使用paint方法也不使用updat方法。 它使用getGraphics()代替,我提示要扩展要截屏的applet。 但是applet是动态加载的,那么如何用已加载的类(或applet)扩展一个类?

有人可以提供代码示例吗? 我要吓坏了,因为这花了我所有的时间,没有这个我不能继续。

看看cglib

如果要实现一个接口而不是要扩展的类,请查看java.lang.reflect.Proxy

如果您只是动态添加字段或以其他方式添加字段,将没有任何使用它的代码是毫无意义的(通过反射访问除外)

如果您想要一个具有动态字段名称的对象,则可能真正想要Map<String, Object>


您可以扩展具有附加字段的类,只要不是最终形式,可以采用多种方法。

您可以在编译时执行此操作,可以在运行时编译代码,也可以在运行时从生成的字节码添加类。

如果您知道需要扩展一个类,请编写代码来做到这一点,而无需生成任何东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM