小编Rob*_*rtG的帖子

禁用JVM的"Internet访问"?

我想知道是否有办法告诉JVM它无法连接到某个Java程序的任何Web资源,或者在执行此操作时立即失败,即执行相当于关闭Internet访问的软件硬件开关.这是为了协助自动测试,禁用系统的防火墙对我来说是没有选择的.

背景: 我目前正在研究一个Java问题,其中XML标识转换不适用于XML中引用的DOCTYPE,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="32px"
     height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<!-- content.... -->
</svg>
Run Code Online (Sandbox Code Playgroud)

DocumentBuilderFactory,TransformerFactory等的标准行为是访问Web以查找缺失的实体.虽然修复建议/sf/answers/657902171/(NullEntityResolver)解决了我的大多数问题,但我想在"离线环境"中以自动方式测试此功能以进行回归.

java

11
推荐指数
1
解决办法
3312
查看次数

使用GraphicsEnvironment取消注册字体?

我最近发现了如何使用本地GraphicsEnvironment st注册TTF字体,对于我的用例(SVG-to-PNG转码),Apache Batik可能会识别字体:

import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;

// [...]

GraphicsEnvironment lge = GraphicsEnvironment.getLocalGraphicsEnvironment();
try {
    Font font = Font.createFont(Font.TRUETYPE_FONT, fontFile);
    lge.registerFont(font);
} catch (FontFormatException e) {
    logger.warn(e.getMessage(), e);
} catch (IOException e) {
    logger.warn(e.getMessage(), e);
}
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否可以取消注册任何预先存在的字体,以保证只有我注册的字体才会用于转码.

没有GraphicsEnvironment #unregisterFont(...),我怎么能实现这个呢?

PS:我不想继承GraphicsEnvironment的子类,因为我不能假设存在任何特定的子类,如sun.awt.Win32GraphicsEnvironment.

编辑: 更多信息:

  • 由于sun.font.FontManager随Java7(从类到接口,以及诸如此类)改变,我宁愿不使用依赖它的任何解决方法.
  • 我的JVM是Oracle JVM.

java fonts awt batik

7
推荐指数
1
解决办法
835
查看次数

标签 统计

java ×2

awt ×1

batik ×1

fonts ×1