java 自定义 URLStreamHandlerFactory
最近使用layui作为javafx的表现层发现layui的字体文件在打包后无法正常加载在经过仔细排查后发现是打包后路径发生变化导致的所以就自定义了URLStreamHandlerFactory来处理无法加载的文件。static { URL.setURLStreamHandlerFactory(new CustomURLStreamHandlerFactory()); } public static class CustomURLStreamHandlerFactory implements URLStreamHandlerFactory { Override public URLStreamHandler createURLStreamHandler(String protocol) { if(local.equals(protocol)){ return new LocalStreamHandler(); } if (jar.equals(protocol)){ return new CustomJarStreamHandler(); } else { return null; } } } public static class LocalStreamHandler extends URLStreamHandler { Override protected URLConnection openConnection(URL u) throws IOException { return new CustomURLConnection(u); } } public static class CustomJarStreamHandler extends sun.net.www.protocol.jar.Handler { Override protected URLConnection openConnection(URL url) throws IOException { if(url.toString().contains(local)||url.toString().contains(app.jar!)){ return new CustomURLConnection(url); }else{ return super.openConnection(url); } } }public static class CustomURLConnection extends HttpURLConnection { private InputStream inputStream; CustomURLConnection(URL url) throws IOException { super(url); } Override public void disconnect() { if (inputStream ! null) { try { inputStream.close(); } catch (IOException e) { log.debug(e.getMessage(), e); } } connected false; } Override public boolean usingProxy() { return false; } Override public void connect() throws IOException { if (connected) { return; } inputStream loadData(CustomURLConnection.class.getClassLoader()); connected true; } Override public int getResponseCode() throws IOException { return HttpURLConnection.HTTP_OK; } Override public InputStream getInputStream() throws IOException { return inputStream; } private InputStream loadData(ClassLoader loader) { String protocol url.getProtocol(); if (protocol.equals(jar)) { String path url.getPath(); if (path.contains(local)) { byte[] response JavaScriptNative.scriptNative.getResponse(url.toExternalForm()); return new ByteArrayInputStream(response); } if (path.contains(jar://file/)) { path path.substring(path.indexOf(jar://file) jar://file.length() 1); try { path URLDecoder.decode(path, UTF-8); return Files.newInputStream(Paths.get(path)); } catch (IOException e) { log.debug(e.getMessage(), e); } return new ByteArrayInputStream(new byte[0]); } path path.substring(path.indexOf(app.jar!) app.jar!.length() 1); return loader.getResourceAsStream(path); } byte[] response JavaScriptNative.scriptNative.getResponse(url.toExternalForm()); return new ByteArrayInputStream(response); } }

相关新闻

2026毕业神器实测|Okbiye全套论文功能详解!从写作到答辩一站式通关

2026毕业神器实测|Okbiye全套论文功能详解!从写作到答辩一站式通关

对于高校学生来说,毕业论文是毕业必经的核心关卡。从选题开题、文稿撰写、文献搜集、排版降重,到最终查重核验、答辩展示,整套流程繁琐复杂、细节繁多,耗费大量时间精力。 2026年高校全面实行查重AI痕迹双检机制,传统…

2026/7/21 15:38:38 阅读更多 →
告别文献焦虑✅Okbiye千万文献库+学术翻译!搞定论文参考文献、外文研读全流程

告别文献焦虑✅Okbiye千万文献库+学术翻译!搞定论文参考文献、外文研读全流程

写论文最磨人的两大难题,找文献找不到、外文文献看不懂。 很多同学开题卡文献、综述卡素材:苦苦搜遍各大平台,文献老旧过时、数量稀少,贴合选题的核心资料寥寥无几;好不容易找到高质量SCI、EI外文文献,通篇…

2026/7/21 15:38:38 阅读更多 →
ROR1靶向ADC药物:突破性进展与临床价值

ROR1靶向ADC药物:突破性进展与临床价值

1. 项目概述:ADC药物与ROR1靶点的突破性进展 上周行业里最振奋的消息莫过于华东医药宣布其ROR1靶向ADC药物获得FDA孤儿药资格认定。作为深耕肿瘤药物研发多年的从业者,我第一时间调取了公开资料进行研究。这个进展不仅意味着国内药企在ADC赛道实现了从跟…

2026/7/21 15:37:35 阅读更多 →

最新新闻

C++ TCP同步文件下载器实现:从Socket API到粘包处理实战

C++ TCP同步文件下载器实现:从Socket API到粘包处理实战

1. 项目概述与核心价值 最近在整理一些老项目的代码,翻到了一个用纯C和Windows Socket API实现的TCP文件下载工具。这个项目虽然不大,但麻雀虽小五脏俱全,它完整地走了一遍TCP同步通信的流程,从建立连接到收发数据,再到…

2026/7/21 20:45:17 阅读更多 →
2026年Java面试高效复习策略:构建知识体系与场景化应用

2026年Java面试高效复习策略:构建知识体系与场景化应用

如果你正在准备2026年的Java面试,可能会陷入一个典型的困境: 面试范围越来越广,从Java基础、并发、JVM、MySQL到Spring全家桶,还要准备场景题、八股文,甚至现在连大模型相关的知识都可能被问到。 你感觉需要复习的知…

2026/7/21 20:45:17 阅读更多 →
C++重制《植物大战僵尸》:从游戏循环到对象池的完整实践指南

C++重制《植物大战僵尸》:从游戏循环到对象池的完整实践指南

1. 项目概述:为什么选择用C重制《植物大战僵尸》?如果你是一个对游戏开发感兴趣,尤其是对C这门“硬核”语言有学习热情的开发者,那么“从零构建一个《植物大战僵尸》重制版”这个项目,绝对是一个能让你从入门到进阶&am…

2026/7/21 20:45:17 阅读更多 →
Data as a Service(DaaS)核心原理与工程落地实践

Data as a Service(DaaS)核心原理与工程落地实践

我不能基于您提供的输入内容生成符合要求的博文。原因如下:输入内容实质为一篇已被发布在第三方媒体平台(Towards AI)的署名文章的元信息片段,包含明确的版权声明、作者署名、出版方标识(“Originally published on To…

2026/7/21 20:45:17 阅读更多 →
决策树分裂标准:信息熵与错分率的本质差异与实战选择

决策树分裂标准:信息熵与错分率的本质差异与实战选择

1. 项目概述:为什么一棵树的“切口”位置,比树长得高不高更重要?在机器学习实战中,我见过太多人把决策树当成黑箱——调个sklearn.tree.DecisionTreeClassifier,跑完fit()就急着看准确率,结果模型在训练集上…

2026/7/21 20:45:17 阅读更多 →
WebExtension Skip Redirect:高效解决浏览器重定向问题的完整技术方案

WebExtension Skip Redirect:高效解决浏览器重定向问题的完整技术方案

WebExtension Skip Redirect:高效解决浏览器重定向问题的完整技术方案 【免费下载链接】webextension-skip-redirect Some web pages use intermediary pages before redirecting to a final page. This add-on tries to extract the final url from the intermedia…

2026/7/21 20:44:17 阅读更多 →

日新闻

Octane Render与C4D汉化版安装与优化指南

Octane Render与C4D汉化版安装与优化指南

1. Octane Render与C4D的黄金组合:为什么选择这个方案?在三维创作领域,渲染器的选择往往决定了作品的最终呈现质量和工作效率。作为Cinema 4D(C4D)用户,Octane Render的GPU加速特性与实时预览功能&#xff…

2026/7/21 0:00:19 阅读更多 →
GPMC接口设计:异步/同步模式与多路复用配置实战

GPMC接口设计:异步/同步模式与多路复用配置实战

1. GPMC接口设计:从硬件连接到软件配置的全局视角在嵌入式系统开发中,尤其是基于TI Sitara系列如AM263x这类高性能微控制器的项目里,外部存储器的扩展几乎是绕不开的一环。无论是存放大量非易失性代码的NOR Flash,还是作为高速数据…

2026/7/21 0:00:19 阅读更多 →
UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

1. 项目概述:UE5 GAS RPG被动技能的核心价值在UE5里用GAS(Gameplay Ability System)做RPG游戏,主动技能像是你手里的武器,按一下打一下,逻辑直接,反馈也快。但被动技能,它更像是你身…

2026/7/21 0:00:19 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻