我正在尝试在Java 9中设置Dock图标。
在Java的早期版本中,这可以通过以下方式实现,
com.apple.eawt.Application.getApplication().setDockIconImage(image);
但不幸的是,在Java 9中,Application类已过时且无法访问(也许还缺少?)。
对于Application类中发现的所有其他任务,java.awt.Desktop
该类采用了此功能,除了Dock操纵之外。
在JEP 272中提到了此更改,以及Dock过于面向Apple(对我而言都是面向Apple)的想法,对此没有明确的解释。
Google搜索还提供有关如何处理此问题的9之前的信息。
有谁知道如何用Java 9完成操作?
在纯 Java 中,使用插装和 Java 代理,有一种方法可以在运行时替换方法体。
不幸的java.lang.instrument.Instrumentation
是在 Android 下不可用。
我已经检查了所有其他替代方案,例如这里在stackoverflow 中描述的替代方案,它指向过时的javassist-android实现。这令人惊讶地有效,但仅适用于新课程。
还有一篇名为Hot swapping code in Android的文章描述了如何在运行时再次加载类,而不是如何替换现有的类方法。
唯一处理这个问题的文章是一篇名为Android hacking:replace system classes methods with your own 的文章,它没有提供源代码并引用了 Dalvik,而不是 ART(因此它不适用于现代硬件)。
那么,有没有什么办法呢?
...
底线:我想要这样做的原因是在我的应用程序中跟踪特定的方法调用,就像调用此方法时(并在它之前执行某些操作)和此方法退出时(并对其执行一些操作)一样。这些方法是在运行时定义的,因此无法在编译时提前知道它们。