gpt4 book ai didi

java - 来自 javax.print 库的不一致结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:25 25 4
gpt4 key购买 nike

我在 Tomcat 5.0 中运行的 Web 应用程序中有一段代码调用了 javax.print.PrintServiceLookup 方法 lookupPrintServices(null, null)。以前,此代码返回一个相当大的数组,按预期列出服务器上的所有打印机。最近有一天,它突然开始表现不同,现在返回一个没有打印机的零大小数组。经过相当彻底的检查,我无法确定可能发生了什么变化导致此方法现在的行为与以前不同。

我制作了一个包含相同方法调用的小型独立测试程序。

    PrintService[] printers = PrintServiceLookup.lookupPrintServices(null, null);

System.out.println("Java Version: " + System.getProperty("java.version"));
System.out.println("Printers found:");
if (printers != null) {
for (PrintService printer : printers) {
if (printer != null) {
System.out.println(" " + printer.toString());
}
}
}
System.out.println("End");

运行这个程序,它做出不同的 react ,返回完整的打印机列表。仔细检查,我在 Web 应用程序的上下文初始化方法中放置了相同的代码(使用日志记录语句而不是 System.print 语句),它仍然返回零打印机。该方法返回不同的结果,具体取决于它是从网络应用程序大战还是从独立 jar 运行。

我的一些同事建议这可能与安全管理器有关,事实上,documentation for the PrintService class表示安全管理器的某些属性可以改变方法调用的结果。但是,在我的测试中添加了一些代码来检索和查看安全管理器之后,这两种情况似乎都没有。

    try {
if (sec != null) {
System.out.println(sec.toString());
sec.checkPrintJobAccess();
}
System.out.println("*-*-*-*-*Printer Access allowed!!");
}
catch (SecurityException e) {
System.out.println("*-*-*-*-*Printer NOT Access allowed!!");
}

结果是安全管理器在这两种情况下都是空的

在不同的服务器上尝试,Web 应用程序和独立 jar 版本的服务器都没有返回打印机。我找不到一致性。

这是怎么回事? 是什么导致此 javax 方法调用在不同情况下返回不同结果? Web 应用程序可能会发生什么变化以改变它在一天和下一天之间的行为?

最佳答案

尝试使用此选项启动服务器 -DUseSunHttpHandler=true 以使用 JDK API 而不是服务器 API 启动 HTTP URL 连接。希望这对你也有用。

关于java - 来自 javax.print 库的不一致结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17727041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com