Java awt Desktop 无法调用系统浏览器
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,用Spring boot搭建项目时,希望在项目启动完后能自动谈出首页。就用了java.awt.Desktop类 if (Desktop.isDesktopSupported()) {
千家信息网最后更新 2025年02月03日Java awt Desktop 无法调用系统浏览器
用Spring boot搭建项目时,希望在项目启动完后能自动谈出首页。
就用了java.awt.Desktop类
if (Desktop.isDesktopSupported()) { try { // 弹出浏览器 - 显示HTTP接口(https) Desktop.getDesktop().browse(new URI("https://blog.csdn.net/weixin_42156742/article/details/81383628")); } catch (Exception e) { LOGGER.info(e.getMessage()); } }
结果在测试类里可以正常访问,在启动项目后却无法弹出网页。
public static synchronized Desktop getDesktop(){ if (GraphicsEnvironment.isHeadless()) throw new HeadlessException(); if (!Desktop.isDesktopSupported()) { throw new UnsupportedOperationException("Desktop API is not " + "supported on the current platform"); } sun.awt.AppContext context = sun.awt.AppContext.getAppContext(); Desktop desktop = (Desktop)context.get(Desktop.class); if (desktop == null) { desktop = new Desktop(); context.put(Desktop.class, desktop); } return desktop; }
private static boolean getHeadlessProperty() { if (headless == null) { AccessController.doPrivileged((PrivilegedAction) () -> { String nm = System.getProperty("java.awt.headless"); if (nm == null) { /* No need to ask for DISPLAY when run in a browser */ if (System.getProperty("javaplugin.version") != null) { headless = defaultHeadless = Boolean.FALSE; } else { String osName = System.getProperty("os.name"); if (osName.contains("OS X") && "sun.awt.HToolkit".equals( System.getProperty("awt.toolkit"))) { headless = defaultHeadless = Boolean.TRUE; } else { final String display = System.getenv("DISPLAY"); headless = defaultHeadless = ("Linux".equals(osName) || "SunOS".equals(osName) || "FreeBSD".equals(osName) || "NetBSD".equals(osName) || "OpenBSD".equals(osName) || "AIX".equals(osName)) && (display == null || display.trim().isEmpty()); } } } else { headless = Boolean.valueOf(nm); } return null; }); } return headless; }
往下排查原因,发现 getHeadlessProperty 方法中 System.getProperty("java.awt.headless") 处获取系统参数时返回了true。
导致直接抛出了HeadlessException异常。Headless模式是在缺少显示屏、键盘或者鼠标时的系统配置,这是此处的参数导致了无法弹出指定窗口。
System.setProperty("java.awt.headless", "false");
所以需要提前设置参数为false。
参数
项目
系统
浏览器
浏览
原因
接口
方法
是在
显示屏
模式
结果
网页
这是
键盘
鼠标
首页
测试
配置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术与信息技术处理
如何和如何维护国家网络安全
计算机网络安全专业考研难吗
网络安全答题竞赛活动
软件开发应用技术专业前景
福建信息化软件开发出厂价格
重庆文守网络技术有限公司
上海八百里人网络技术公司
阿里云购买服务器
湖南展览展厅中控服务器
怎样在数据库里面新建数据库
企业网络安全合规风险
php连接数据库显示表
维护网络安全教育学习体会
c 搭建http服务器
上海软件开发有哪些
腾讯网络安全生态舰队
当今我国公民网络安全意识
网络安全手抄报内容文字30字
解读网络安全四个坚持
软件开发经历了哪四个历程
大华存储服务器怎么格式化
辽宁pdu服务器电源制造商
支付宝服务器安全性
服务器修改用户名
数据库事务能干嘛
应用服务器两层和三层
社交软件开发注意事项
注册软件显示服务器错误
方舟服务器实用模组