- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将旧的打印机 API 代码迁移到 Java 8,并出现以下警告:
Access restriction: The method 'AppContext.getAppContext()' is not API (restriction on required library 'C:\Program Files\Java\jre1.8.0_51\lib\rt.jar')
这是由于这段代码(最初源自this SO question):
/**
* Printer list does not refresh itself; need to run this to refresh if necessary.
*/
public static void refreshSystemPrinterList() {
Class[] classes = PrintServiceLookup.class.getDeclaredClasses();
for (int i = 0; i < classes.length; i++) {
if ("javax.print.PrintServiceLookup$Services".equals(classes[i].getName())) {
AppContext.getAppContext().remove(classes[i]); // the line that throws the warning
break;
}
}
据我了解,PrintServiceLookup
在类加载时加载可见打印机列表,但它显然不会刷新此列表,或者能够触发刷新。长时间运行的应用程序刷新列表的方法是卸载类(这就是代码正在执行的操作),或者重新启动自身。
对警告的温和研究表明,在 Java 9 中,AppContext.getAppContext()
将无法访问。在没有进一步研究的情况下,我目前的补救想法是使用可访问的类加载器来加载此类,并在调用此方法时清除类加载器。
最终,我想知道我需要做什么才能正确替换它。目前在 Windows 上运行,可能会迁移到 Linux ;我看到 this SO question 有很多更新关于 Linux 实现。
最佳答案
PrintServiceLookupProvider
(PrintServiceLookup
的唯一具体实现提供了一个应该执行此操作的线程。
它无限循环地检查更改,如果有更改,则调用 refreshServices
。
class PrinterChangeListener implements Runnable {
long chgObj;
PrinterChangeListener() {
chgObj = notifyFirstPrinterChange(null);
}
@Override
public void run() {
if (chgObj != -1) {
while (true) {
// wait for configuration to change
if (notifyPrinterChange(chgObj) != 0) {
try {
refreshServices();
} catch (SecurityException se) {
break;
}
} else {
notifyClosePrinterChange(chgObj);
break;
}
}
}
}
}
从这里开始:
Thread thr = new Thread(null, new PrinterChangeListener(), "PrinterListener", 0, false);
thr.setDaemon(true);
thr.start();
如果您遇到此功能不起作用的问题,您应该调查为什么 notifyPrinterChange
没有指示某些内容发生了更改。这是一种 native 方法,因此实现取决于您的操作系统。
不幸的是,您甚至无法使用反射来手动调用 refreshServices
,因为 Sun 模块上的反射受到限制(您可以覆盖它,但如果您这样做,那么您也可以覆盖 AppContext
)
关于java - 从 AppContext 中删除类的 Java 9+ 等效项是什么?需要重新加载PrintServiceLookup类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60763560/
AppContext 似乎只有一个名为 BaseDirectory 的属性。但是 Environment 类似乎有更多的属性和方法。 那么 AppContext 现在是否被 Environment 类
我在一个 github project 中找到了类: public class AppContext { private static Context sContext; privat
根据官方指南,我目前正在努力研究 android 平台的架构组件: 在我的应用程序中,我目前需要存储一个字符串列表(名称)并在多个位置( Activity 和服务)访问它。我想到了 2 种可能的方法:
是否可以使用对 getApplicationContext() 的引用从后台线程引发 AlertDialog? 我正在尝试使用该代码,但它不起作用 new Thread(){
我附上了我的 JDK 附带的 src.zip,但它似乎缺少一些文件。 就好像我没有任何 sun.*; 包一样。如果它们可能因 java.awt.AppContext 而改变,我会理解,但这不会退出。
我有一个grails应用程序,该应用程序使用appContext.xml定义bean。当我运行该应用程序时,一切都正常。但是,当我尝试使用@ContextConfiguration运行单元测试时,所有
我有两个同名、同类的 bean。我想模拟其中一个(模拟不是通过@Mock注释完成的,而是由于某种原因在Spring文件中完成的),而另一个则保持正常(用于集成测试)。 我能想到的一种方法是更改 @
在 Play 1.x 应用程序中,我想创建一个名为 AppContext 的类,它将作为应用程序中服务之间的粘合层。它可以作为一个简单的依赖注入(inject)器,但我也希望它能够控制事件的工作流,从
我在 Eclipse 中创建了一个小 bean 类。它在 NetBeans 中工作,但在 Eclipse 中它说 Resource leak: 'appContext' is never closed
我的团队正在分析我们的 Swing 应用程序,以确保在不再使用时对所有内容进行垃圾回收。我们遇到了一个奇怪的问题。 我们只是打开一个新窗口 (JFrame) 然后关闭它。此框架包含一个 EmptyPa
我正在开发 ASP.NET Core 3.1 Web API并拥有我的 swagger设置。我已将 swagger 文档添加到我的项目中。 右键单击 API Project -> Build -> O
我有一个 Spring ApplicationContext,我在其中声明 Jetty 服务器 bean 并启动它。在 Jetty 内部,我有一个 DispatcherServlet 和几个 Cont
我正在尝试使用 Spring 创建 REST Web 服务。 我有一个 Controller ,一个 appContext。 Controller : @Controller public class
有什么方法可以在不直接使用 Spring Context 的情况下加载标有 @ConfigurationProperties 的类?基本上我想重用 Spring 所做的所有智能逻辑,但对于我在 Spr
我的 WebAppContext 中有列表和 map 。 大多数情况下,这些只能由多个线程读取,但有时需要更新或添加一些数据。 我想知道在不引起 ConcurrentModificationExcep
我在使用最简单的 maven-spring 应用程序时遇到了一些困难。实际上,BeanFactory 找不到 appContext.xml 文件,尽管它位于资源目录中并正确复制到目标目录中。这是我
我将旧的打印机 API 代码迁移到 Java 8,并出现以下警告: Access restriction: The method 'AppContext.getAppContext()' is not
我有 2 个基于 spring 的 jar 文件——parent.jar 和 child.jar。 parent.jar 有一个parent_applicationContext.xml 和一个属性文
如何在 Spring MVC applicationContext.xml 中配置 mongo 集群详细信息(它使用两个服务器)? 数据库.属性 mongo.db.host=server1 mong
当我在嵌入式 Tomcat 上启动 Spring Boot 应用程序并且在启动过程中出现某些问题时(例如没有连接到 DB 或 Liquibase 更新失败或发现循环依赖等),Tomcat 继续监听 8
我是一名优秀的程序员,十分优秀!