首页 > 解决方案 > 我可以阻止 PlantUML 在 MacOS 上运行时显示 Java Duke 图标吗

问题描述

当我SourceStringReader在 MacOS 上使用我的 Java 代码中的 PlantUML 时,Duke 图标在我的 Dock 中弹跳。在加载其第一个 PlantUML 类之前,该过程不会发生这种情况。

代码是

import net.sourceforge.plantuml.FileFormat
import net.sourceforge.plantuml.FileFormatOption
import net.sourceforge.plantuml.SourceStringReader
import java.io.ByteArrayOutputStream
import java.io.File

fun List<String>.toSvg(): String {
    val reader = SourceStringReader(this.joinToString("\n"))
    return ByteArrayOutputStream().use {
        val fileFormatOption = FileFormatOption(FileFormat.SVG)
        reader.generateImage(it, fileFormatOption)
        String(it.toByteArray(), Charsets.UTF_8)
    }
}

评估FileFormatOption(FileFormat.SVG)会导致图标出现。

我的猜测是 PlantUML 正在初始化一些导致 Mac 在 Dock 中显示图标的图形子系统 - 我可以不显示图标吗?

标签: javaplantuml

解决方案


问题似乎是FileFormatOption加载java.awt.geom.AffineTransform类,它初始化 AWT,弹出停靠图标。

System.setProperty("java.awt.headless", "true")在第一次调用 PlantUML 之前运行可以解决问题。

直接运行PlantUML,有一个-headless选项:java -jar plantuml.jar -headless -verbose some-file


推荐阅读