如何在Eclipse RCP应用程序中使用java.lang.instrument?

richq:

为了使用JDK 5中引入的检测功能,可以使用-javaagent传递给JVM 标志。这会将Instrumentation类的实例注入到静态premain方法中。例如在这样的类中:

public class MyClass {
    public static Instrumentation inst;
    public static void premain(String options, Instrumentation inst) {
        MyClass.inst = inst;
    }
}

使用适当的清单文件,可以按以下方式运行它:

 java -javaagent:myfiles.jar SomeClass

然后main调用premain方法SomeClassJava.SizeOf项目中使用此方法来猜测Java对象的近似大小。

好的,现在在Eclipse RCP中,每个捆绑软件都有自己的类加载器这意味着我们存储在MyClass中的静态Instrumentation对Eclipse应用程序不可见。javaagent使用一个类加载器,Eclipse捆绑包中加载另一个。当我们访问MyClass.inst从内插件是null,因为类是不一样的类作为一个javaagent加载,并呼吁premain对。

有关可能解决方案的其他线索是rcp邮件列表上的该线程但没有定论。

有什么办法可以解决此问题?Eclipse-BuddyPolicy在eclipsezone文章听起来不错暗示。我试过了:

Eclipse-BuddyPolicy: app

在我的插件中没有运气。我需要类似的东西Eclipse-BuddyPolicy: javaagent有任何想法吗?

爸妈:

我认为最简单的解决方案是使用全局属性对象。先将工具对象存储为全局属性,然后从任何地方访问它(属性对象在所有类加载器中都是相同的):

[编辑:已更新]

public class MyClass {
    private static final String KEY = "my.instrumentation";
    public static void premain(String options, Instrumentation inst) {
        Properties props = System.getProperties();
        if(props.get(KEY) == null)
           props.put(KEY, inst);
    }

    public static Instrumentation getInstrumentation() { 
       return System.getProperties().get(KEY);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

遇到“ java.lang.NoSuchMethodError:io.micrometer.core.instrument.Tags.zip([Ljava / lang / String;)Lio / micrometer / core / instrument / Tags;”

如何在 Eclipse RCP 应用程序中使用 mylyn 通知扩展?

cobertura-instrument.sh无法使用java.lang.NoClassDefFoundError检测jar文件:net.sourceforge.cobertura.instrument.InstrumentMain

如何在Eclipse RCP应用程序中使视图可滚动?

Corda-无法初始化主类胶囊(引起原因:java.lang.NoClassDefFoundError:java / lang / instrument / Instrumentation)

Eclipse + Maven + Spring应用程序:java.lang.NoClassDefFoundError

使用“ adb shell am instrument”时如何获取测试结果

在其他应用程序中使用Eclipse RCP GUI

在Eclipse RCP Tycho应用程序中使用第三方库

如何在Java应用程序中使用Akka Actors?

如何在应用程序中使用Facebook JAVA API?

如何在 AndroidStudioProject 的 Java 应用程序中使用 kotlinOptions?

如何在Java应用程序中使用Prolog规则

在Windows上的Eclipse RCP应用程序中使用时,如何禁用swt浏览器的点击声?

在Android Java应用程序中使用Kotlin AAR时出现java.lang.NoClassDefFoundError

如何使用SBT构建Netbeans RCP应用程序?

如何在Eclipse RCP应用程序中设置首选项的默认值

如何在Eclipse中查看Java SDK类(java.lang,java.util等)的源代码?

如何在Eclipse swt应用程序中使用Windows Edge浏览器代替IE?

如何在未附加到应用程序模型的类中使用eclipse 4 DI?

在Spring Boot应用程序中使用Rackspace时的Apache jclouds java.lang.NoSuchMethodError

在Spring-boot应用程序中使用lombok时产生java.lang.ExceptionInInitializerError

Java-如何存储应用程序中使用的密码?

如何在Eclipse中修复jgit类的java.lang.ClassNotFoundException

如何在Eclipse中设置Gradle Java应用程序?

Eclipse RCP 2018-09 + OpenJDK 11 + tycho:如何使用JRE打包应用程序?

如何获得Eclipse RCP应用程序的OSGi BundleContext?

如何从Eclipse RCP应用程序中的代码更新视图

如何在春季启动应用程序中修复错误“ java.lang.NoClassDefFoundError:org / springframework / boot / bind / RelaxedPropertyResolver”?