当前位置: 首页 > news >正文

JavaFX CSS @font-face 错误全面分析 loadStylesheetUnPrivileged / reportException

JavaFx 支持样式表,并且支持@font-face加载指定字体。官方提供的示例代码如下:

@font-face { font-family: 'sample'; font-style: normal; font-weight: normal; src: local('sample'), url('http://font.samples/resources/sample.ttf';) format('truetype'); }

但是这段代码极具误导性,而且很容易出现如下错误:

// 错误1 com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged INFO:Could not load @font-face font [file:/D:/JOYZL%20SCADA/scada/trunk/brace/target/classes/com/joyzl/brace/window/HUATENS.ttf] // 错误2 javafx.css.CssParser reportException 警告: Please report java.lang.NullPointerException at:

其次的错误是字体加载成功了,但是却没有生效。

原因为:

1.StyleManager使用Font.loadFont()这个方法不会对URL编码的百分号字符执行解码,那么如果路径中存在空格,会导致加载失败。由于CSS中的路径URL是样式解析器通过getResource获得的,因此我们没有可用的干预手段,折中的方案是,JavaFx 程序启动时通过代码加载字体,我们需要将%20替换为 空格。

2.src:url("/sample.ttf")的URL不能出现‘/’开头的根目录表示形式,字体文件定位相对于CSS文件的位置,不应使用绝对路径,请改为相对路径。如果路径解析失败将收到reportException异常。

3. 字体加载成功(未提示异常),但是字体依然没有生效,是为字体名称匹配失败,这会由三个原因导致:
A.@font-face中指定的font-family是无效的,JavaFx 不会使用这个指令,@font-face中除了src:url之外的指令都被忽略,包括 url 后面的format,只能使用字体默认名称。
B. 字体默认名称,在不同的操作系统可能不一样,以“阿里巴巴普惠体”字体测试,在简体中文 Windows 11 中字体名称为'阿里巴巴普惠体 3.0 45 Light'而在 Debian 12 中字体名称为'Alibaba PuHuiTi 3.0 45 Light',并且-fx-fongt-family指令不支持多个字体名称,是不是要疯了。
C. 样式表中的字体名称必须有引号包围,否则依然会匹配失败。

-fx-font-family: Monserrat; /*无效*/ -fx-font-family: 'Monserrat';

JavaFX CSS Reference Guide

Introduction to FXML | JavaFX 24

以上是 我们在编译 JOYZL SCADA Station 和 R11 的 Windows 和 Linux 两个版本时,所遇到的 JavaFx 字体问题的分析和解决,希望 JavaFx 持续改进。 JOYZL SCADA Station 是完全国产化的 数据采集与监测控制软件,主要应用于工业数据采集监控。

http://www.jsqmd.com/news/1187696/

相关文章:

  • 2026年芜湖市靠谱装修公司有哪些:透明报价拒绝增项,品质施工售后无忧 - 速递信息
  • 终极Wand-Enhancer指南:三步免费解锁WeMod专业版完整功能
  • GTA 5终极增强菜单YimMenuV2:新手快速上手指南
  • Unity3D集成深度学习:ONNX Runtime与C# Job System实战指南
  • 探索mlx-community/gemma-4-31b-it-4bit的量化奥秘:4-bit如何实现31B参数高效运行
  • Alot高级配置:Python钩子与自定义格式化让邮件管理更智能
  • 2026康复护理科普,缺少屏障修复会延缓猫咪炎症消退 - 思溯深度专栏
  • 3步搞定:Windows免费Syslog服务器从部署到实战
  • 2026广州黄金回收行情实测,金条旧金统一大盘价差透明计价 - 禹竞奢收行
  • 海口香奈儿包包怎么卖最贵?2026易奢福源头渠道,热门款出价碾压同城同行 - 奢侈品回收实体店
  • 终极免费音乐解决方案:Spotube跨平台音乐播放器完全指南
  • PMBus寄存器映射详解:从硬件抽象到数字电源精准控制
  • 3分钟学会用Mermaid Live Editor:零代码绘制专业图表的秘密武器
  • 南大通用GBase 8s数据库集群切换模式对比与运维建议
  • Godot游戏开发:一张白图实现动态变色血条系统
  • Boogu-Image-0.1-Edit-4bit核心技术解析:DiT+FLUX.1 VAE+FlowMatchEuler三大架构深度剖析
  • 买二手手机不踩雷:平台商品页要重点看什么? - 资讯快报
  • 路桥区黄金回收5家门店实地深度测评|2026路桥卖黄金避坑完整版 - 得天独厚
  • 如何让经典DirectX游戏在现代Windows上完美运行:DDrawCompat配置手册
  • iCloud Photos Downloader终极指南:如何简单快速备份你的苹果照片库
  • 2026年杂粮煎饼商用刷酱选购全攻略:从口味适配到成本控制的全面指南 - 麻辣烫酱料
  • 3步完成Android设备安全检测:Play Integrity API Checker终极指南
  • Navicat无限试用破解指南:从技术原理到实战应用的深度解析
  • 10个技巧:从gh_mirrors/tu/turkish-microservice-architecture-book学习微服务架构最佳实践
  • OpCore Simplify:打破黑苹果技术壁垒,让普通用户也能轻松上手
  • 2026 年北京自驾租车会议团建包车北京包车本地商家真实测评 - LYL仔仔
  • 对比第三方 GEO 插件与自研源码:分析源码模式做本地优化的长期优势
  • Alot与notmuch深度整合:打造极速邮件索引与搜索系统
  • 厦门湖里黄金回收 2026 行情曝光,易奢福揭秘行业常见压价手段 - 奢侈品回收实体店
  • 立可安 LoRa 无线火灾报警系统全面介绍 |厂家电话:185-9427-5329 - 厂家新闻网