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

使用 Shadcn UI 构建 Java 桌面应用

在这里插入图片描述

许多桌面应用程序,如 Slack、Notion、Microsoft Teams 和 Linear,都采用基于 Web 的用户界面。这已成为现代软件开发中的常见做法,开发者可以借助熟悉的 Web 技术构建应用,从而简化开发流程。

在本篇文章中,我们将向您如何基于 shadcn/ui、React、Tailwind CSS 和 TypeScript,开发一款具有现代网页界面的跨平台 Java 桌面应用程序。

Web vs 原生 UI

传统的 Java 原生 UI 工具包(如 Swing、JavaFX 和 SWT)存在诸多局限:

  • 维护困难:UI 修改复杂,难以构建现代化的界面。
  • 功能缺失:对富样式、动态图形、动画和过渡效果的支持有限。
  • 界面陈旧:默认控件外观笨重,开发者不得不自行定制。

这并不令人意外,因为这些工具包设计于多年前,早已无法满足当今界面开发的需求。

相比之下,Web UI 大幅简化了开发流程。它拥有丰富的现成库和成熟的生态系统,同时还有活跃的社区提供支持。借助这些优势,开发者能够轻松实现高 DPI 显示适配、触摸屏交互支持、针对不同屏幕尺寸的自适应布局,以及跨平台统一的界面效果。

将 Web UI 引入桌面应用,不仅带来了网页开发的诸多优势,还避免了与过时 UI 工具包打交道的繁琐,也无需再费力寻找掌握老旧技术的开发者。

Java 桌面应用中的 Web UI 实践

在本文中,我们将构建一个具有 Web 界面的 Java 桌面应用程序。我们将使用 shadcn/ui —— 这是一个基于 React 的组件库,提供即用型、响应式界面元素。同时,编程语言使用 TypeScript。

该应用将展示一个偏好设置对话框,并将用户的设置保存到本地文件系统中,从而在重启后依然保留设置。以下是其在 macOS 上的实际界面截图:

基于 Web UI 的桌面应用界面截图

基于 Web UI 的桌面应用界面截图

完整源代码可在 GitHub 上获取。

在开发基于 Web UI 的桌面应用时,需要解决以下关键问题:

  1. 可靠的 Web 视图组件:Java 内置组件无法满足现代 Web 标准。
  2. 无服务器资源加载:避免依赖本地或远程服务器,简化部署流程。
  3. Java 与 JavaScript 通信:实现文件系统读写等操作,无需 Web 服务器。

应用窗口与 Web 视图

我们将使用 Swing 的 JFrame 创建一个窗口。JFrame 是 Java 的内置组件,简单易用。接着,我们将从 JxBrowser 添加一个基于 Chromium 的 Web 视图组件,用于在此窗口中显示 Web 内容。

以下是将 Web 视图添加到 Java 窗口的方法:

var engine = Engine.newInstance(HARDWARE_ACCELERATED);
var browser = engine.newBrowser();SwingUtilities.invokeLater(() -> {var view = BrowserView.newInstance(browser);var frame = new JFrame("Application");frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {engine.close();}});frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);frame.add(view, BorderLayout.CENTER);frame.setSize(1280, 900);frame.setLocationRelativeTo(null);frame.setVisible(true);
});

在桌面应用中加载 Web UI

Web 部分是一个标准的 React 应用,我们将其加载到上面创建的浏览器组件中。

加载 Web UI 的方式取决于当前是开发环境还是生产环境。在开发环境中,我们使用典型的 Web 开发流程:启动本地开发服务器,支持热更新和其他常见功能。而在生产环境中,我们需要一个压缩后的、可离线运行的安全版本,避免依赖任何本地或远程服务器。

开发环境

在开发环境中加载 Web 应用非常直接。我们只需启动本地开发服务器并导航到 localhost:

./gradlew startDevServer
if (!AppDetails.isProduction()) {  browser.navigation().loadUrl("http://localhost:[port]");
} else {...
}
生产环境

在生产环境中,我们不能继续使用本地开发服务器的方式,因为此时服务器已不存在。同时,使用远程服务器也不可取。我们的目标是让 Web 应用具备离线运行能力。

此外,无论是本地还是远程服务器,都会带来额外的安全风险:用户可能通过浏览器直接访问 Web 应用的地址,从而查看其源代码,暴露敏感逻辑。显然,这并非我们所希望的。我们希望 Web UI 只能在桌面应用内部访问,并将其源代码完全隐藏在应用包中。

为了实现这一点,我们将 Web 应用文件添加到资源中,并使用 JxBrowser 的 UrlRequest 拦截器 API (Interceptor API)从类路径提供这些文件。

为了允许请求拦截器处理 Web 资源请求,我们将其分配给一个自定义协议:

var options = EngineOptions.newBuilder(HARDWARE_ACCELERATED).addScheme(Scheme.of("jxb"), new UrlRequestInterceptor());
var engine = Engine.newInstance(options.build());

每当浏览器尝试加载 jxb:// URL 时,拦截器就会处理该请求,并从应用的资源目录中返回 index.html。之后,网页请求 CSS、JavaScript 文件等其他资源时,拦截器也会一并处理并返回相关文件。

通过这种方式,所有 Web 资源的加载都发生在应用内部,外部无法拦截,也无法访问这些资源。

同时,使用自定义协议可确保常规 HTTPS/XHR 请求(例如身份验证、API 调用)能够顺利通过。
为了在开发 URL 和生产 URL 之间切换,我们使用以下方法:

if (!AppDetails.isProduction()) {browser.navigation().loadUrl("http://localhost:[port]");
} else {browser.navigation.loadUrl("jxb://my-app.com");
}

Web 与 Java 的通信

就像任何 Web 应用程序与后端通信一样,我们的 Web 应用程序也需要与负责读取偏好设置并将其保存到文件系统的 Java 代码进行通信。

JxBrowser JavaScript-Java Bridge API

最直接的方式是从 JavaScript 直接调用 Java 代码。大多数 Web 视图组件都支持这一功能:有的通过 JSON 对象进行数据交换,有的,如 JxBrowser,甚至允许直接调用 Java 方法、访问 Java 对象。

以下是在 JxBrowser 中设置 JavaScript 和 Java 之间通信的方法:

@JsAccessible
class PrefsService {void setFontSize(int size) {}
}
declare class PrefsService { setFontSize(size: number): void; 
}declare const prefService: PrefsService;
...
prefsService.setFontSize(12);

这种方式适用于小型项目。当通信方法较少时,维护起来尚属轻松,也不容易出错。

但随着项目规模的扩大,这种方式变得越来越难以管理,也更容易出错。由于缺乏编译期检查和自动补全支持,出错的可能性增加,同时难以及时发现它们。对于大型项目,我们需要一种更稳健的通信协议以及自动生成代码的机制,以确保可靠性——否则,我们最终会陷入大量的 bug 之中。

在本节中,我们将提出一个更好的解决方案。

Protobuf + gRPC

我们决定采用 Protobuf 方案。这项技术使我们能够以简单的格式定义 API,并自动生成类型安全的客户端和服务器代码。我们在 .proto 文件中定义消息与服务,随后 Protobuf 会为我们自动生成对应的 Java 和 TypeScript 代码。

service PrefsService {rpc SetFontSize(FontSize) returns (google.protobuf.Empty);
}enum FontSize {SMALL = 0;DEFAULT = 1;LARGE = 2;
}

这种方式建立了一个稳定且类型安全的通信契约,同时还会提供一些有助于加快开发速度的有用功能,例如代码自动补全和类型检查。

我们使用 gRPC 作为可以发送/接收 Protobuf 消息的传输层。通常情况下,Java 端运行 gRPC 服务器,而 Web 端充当客户端。

class PrefsService extends PrefsServiceImplBase {@Overridepublic void setTheme(Theme request, StreamObserver<Empty> responseObserver) {}
}
...
var serverBuilder = Server.builder().http(50051).service(GrpcService.builder()// 注册服务器的实际实现。.addService(new PrefsService()).build());try (var server = serverBuilder.build()) {server.start();server.blockUntilShutdown();
}

当服务器启动后,下一步就是连接 gRPC 客户端。

import {createGrpcWebTransport} from "@connectrpc/connect-web";
import {createClient} from "@connectrpc/connect";
import {PreferencesService} from "@/gen/prefs_pb.ts";const transport = createGrpcWebTransport({baseUrl: `http://localhost:50051`,
});
const prefsClient = createClient(PrefsService, transport);

然后,可以使用 prefsClient 来接收和更新偏好设置:

prefsClient.setFontSize(FontSize.SMALL);

通信示意图

通信示意图

总结

基于 Web UI 的桌面应用开发具有显著优势:

  • 简化开发:丰富的组件库和活跃的社区支持。
  • 现代化界面:轻松实现响应式设计、动画效果等。
  • 跨平台一致性:界面在不同操作系统上表现一致。

在本文中,我们构建了一个简单的 Java 桌面应用程序,其 UI 使用 shadcn/ui、React、Tailwind CSS 和 TypeScript 创建。

在开发过程中,我们解决了构建 Web UI 桌面应用中开发者面临的几项关键难题,包括:

  1. 在 Java 窗口中嵌入 Web 视图以展示 Web UI。
  2. 无需依赖本地或远程服务器加载 Web 资源。
  3. 实现 Java 与 JavaScript 的通信。

带有 Web UI 的桌面 Java 应用程序如下所示:

带有 Web UI 的桌面 Java 应用程序

相关文章:

使用 Shadcn UI 构建 Java 桌面应用

许多桌面应用程序&#xff0c;如 Slack、Notion、Microsoft Teams 和 Linear&#xff0c;都采用基于 Web 的用户界面。这已成为现代软件开发中的常见做法&#xff0c;开发者可以借助熟悉的 Web 技术构建应用&#xff0c;从而简化开发流程。 在本篇文章中&#xff0c;我们将向您…...

25_05_19Linux实战篇、第一章_01若依前后端部署之路(后端)

Linux_实战篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;若依前后端动静分离(后端 ) 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.20 适用环境: Rocky9.5 文档说明 本文围绕 Linux 实战展开&#x…...

Python慕课学习记录

中国大学MOOC&#xff08;慕课&#xff09;观看记录&#xff1a; Python123课后相应的练习、考试记录...

2025年渗透测试面试题总结-快手[实习]安全工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 快手[实习]安全工程师 一面问题分析与详细回答 1. 自我介绍 4. 项目问题与解决 7. 防止SQL注入&…...

【iOS(swift)笔记-10】利用类的继承来实现不同地区语言的显示

XCode项目原生开发有自带的可区分语言的功能体系&#xff0c;建议采用原生开发&#xff0c;此处利用类的继承来实现不同地区语言的显示是为了方便&#xff0c;而且在unity游戏开发中采用此法也挺灵活适用。 // 定义一个语言控制类 class LanguageController { // 根据系统切换…...

C语言中的弱符号 __attribute__((weak)) 的使用方法

以下是一个脱离 CallStack.h 的极简 C 语言示例&#xff0c;通过 弱符号覆盖 和 运行时检查 两个场景&#xff0c;展示 __attribute__((weak)) 的核心用法&#xff1a; 一、代码实现 1. 弱符号定义与覆盖&#xff08;weak_demo.c&#xff09; // weak_demo.c #include <st…...

禁止window安全中心乱删文件

将文件/文件夹添加到 Defender 排除列表 如果你确定文件安全&#xff0c;可以将其添加到 排除列表&#xff0c;防止 Defender 误删&#xff1a; Windows 安全中心 → “病毒和威胁防护” → “管理设置”。 下拉找到 “排除项” → “添加或删除排除项”。 点击 “ 添加排除…...

【JavaScript异步编程终极指南】从回调地狱到Async/Await的实战突围

目录 &#x1f30d; 前言&#xff1a;技术背景与价值&#x1f494; 当前技术痛点&#x1f6e0; 解决方案概述&#x1f465; 目标读者说明&#x1f50d; 一、技术原理剖析&#x1f9e0; 核心作用讲解&#x1f9e9; 关键技术模块说明⚖️ 技术选型对比 &#x1f4bb; 二、实战演示…...

【算法专题十五】BFS解决最短路问题

文章目录 1.最短路问题简介&#xff08;边权为1的最短路问题&#xff09;2.迷宫中离入口最近的出口2.1 题目2.2 思路2.3 代码 3.最小基因变化3.1 题目3.2 思路3.3 代码 4.单词接龙4.1 题目4.2 思路4.3 代码 5.为高尔夫比赛砍树5.1 题目5.2 思路5.3 代码 1.最短路问题简介&#…...

upload-labs通关笔记-第16关 文件上传之exif_imagetype绕过(图片马)

目录 一、exif_imagetype 二、开启exif模块 1、phpstudy设置勾选php_exif模块 2、php.ini文件配置开启php_exif模块 三、源码分析 四、图片马 1、图片马概念 2、图片马制作 五、渗透实战 1、上传图片马 2、利用文件包含访问图片马 &#xff08;1&#xff09;jpg …...

力扣-两数之和

1.题目描述 2.题目链接 LCR 006. 两数之和 II - 输入有序数组 - 力扣&#xff08;LeetCode&#xff09; 3.题目代码 class Solution {public int[] twoSum(int[] numbers, int target) {int[]retnew int[2];int left0,rightnumbers.length-1;while(left<right){if(numbe…...

什么是大数据?

大数据的详细定义 大数据是来自计算机、移动设备和机器传感器的海量数据&#xff08;数万亿字节&#xff09;。企业利用这些数据推动决策、改进流程和政策&#xff0c;并打造以客户为中心的产品、服务和体验。大数据之所以被定义为 “大”&#xff0c;不仅在于其体量&#xff…...

25_05_19Linux实战篇、第一章_02若依前后端部署之路(前端)

Linux_实战篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;若依前后端动静分离(前端) 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.21 适用环境: Rocky9.5 文档说明 环境准备 硬件要求 服务器&…...

SuperVINS:应对挑战性成像条件的实时视觉-惯性SLAM框架【全流程配置与测试!!!】【2025最新版!!!!】

一、项目背景及意义 SuperVINS是一个改进的视觉-惯性SLAM&#xff08;同时定位与地图构建&#xff09;框架&#xff0c;旨在解决在挑战性成像条件下的定位和地图构建问题。该项目基于经典的VINS-Fusion框架&#xff0c;但通过引入深度学习方法进行了显著改进。 视觉-惯性导航系…...

【后端】【UV】【Django】 `uv` 管理的项目中搭建一个 Django 项目

&#x1f680; 一步步搭建 Django 项目&#xff08;适用于 uv pyproject.toml 项目结构&#xff09; &#x1f9f1; 第 1 步&#xff1a;初始化一个 uv 项目&#xff08;如果还没建好&#xff09; uv init django-project # 创建项目&#xff0c;类似npm create vue⚙️ 第 …...

sqlsugar查看表结构并导出word文档

前提 SqlSugar 5.1.4 MiniWord 0.9.2 使用 using MiniSoftware; using SqlSugar;namespace ConsoleApp5 {internal class Program{/// <summary>/// 导出数据库表结构和字段信息/// https://www.donet5.com/Home/Doc?typeId1203/// </summary>/// <param n…...

【机器学习】支持向量机(SVM)

目录 一、支持向量机基本概念 1.1 定义 1.2 支持向量&#xff1a;距离超平面最近的样本点&#xff0c;决定了超平面的位置。 二、线性支持向量机 2.1 硬间隔支持向量机 2.2 软间隔支持向量机 三、非线性支持向量机 3.1 核函数 3.2 常用核函数 3.2.1 线性核&#xff1a…...

[Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十)

[Java实战]Spring Boot整合MinIO&#xff1a;分布式文件存储与管理实战&#xff08;三十&#xff09; 一、MinIO简介与核心原理 MinIO 是一款高性能、开源的分布式对象存储系统&#xff0c;兼容 Amazon S3 API&#xff0c;适用于存储图片、视频、日志等非结构化数据。其核心特…...

SpringBoot微服务编写Dockerfile流程及问题汇总

背景 跟 Docker 磕了两天&#xff0c;将一个包含 N 个微服务的应用部署包改造&#xff0c;使其能够生成 Docker 镜像&#xff0c;并在 Docker 容器中运行。几年前玩过 Docker&#xff0c;隐约记得几个命令「Dockerfile 命令&#xff1a;黑卡饮料、山楂果费、哦SUV&#xff0c;…...

PostgreSQL使用

一、PostgreSQL语法 PostgreSQL表、模式、库三者之间的关系 库 -> 模式 -> 表、视图、函数等等对象。 在postgresql的交互式终端psql中&#xff0c;“\”开头的命令称为元命令&#xff08;类似mysql的show语句&#xff09;&#xff0c;用于快速管理数据库。 常见元命令&…...

现代化SQLite的构建之旅——解析开源项目Limbo

现代化SQLite的构建之旅——解析开源项目Limbo 在当今飞速发展的技术世界中&#xff0c;轻量级且功能强大的数据库已成为开发者的得力助手。当我们谈论轻量级数据库时&#xff0c;SQLite无疑是一个举足轻重的名字。然而&#xff0c;随着技术的进步&#xff0c;我们对数据库的需…...

MySQL 主从复制搭建全流程:基于 Docker 与 Harbor 仓库

一、引言 在数据库管理中&#xff0c;MySQL 主从复制是一种非常重要的技术&#xff0c;它可以实现数据的备份、读写分离&#xff0c;减轻主数据库的压力。本文将详细介绍如何使用 Docker 和 Harbor 仓库来搭建 MySQL 主从复制环境&#xff0c;适合刚接触数据库和 Docker 的新手…...

网页表格转换为markdown

网页表格到Markdown&#xff1a;一键转换&#xff0c;复制即用&#xff01; 在日常工作中&#xff0c;我们经常需要从网页上复制表格数据&#xff0c;并将其转换成Markdown格式&#xff0c;以便在文档、邮件或论坛中使用。然而&#xff0c;手动转换不仅耗时&#xff0c;还容易…...

MySQL字符串拼接方法全解析

目录 常用字符串处理函数 方法一&#xff1a;CONCAT基础拼接 方法二&#xff1a;CONCAT_WS带分隔符拼接 方法三&#xff1a;GROUP_CONCAT分组拼接 方法四&#xff1a;算术运算符拼接&#xff08;仅限数字&#xff09; 常用字符串处理函数 方法一&#xff1a;CONCAT基础拼接…...

零基础教程:用 Docker + pgloader 将 MySQL 数据库迁移到 PostgreSQL

在日常开发中&#xff0c;可能会遇到从 MySQL 迁移到 PostgreSQL 的需求。你也许是&#xff1a; 正在准备从传统架构转向云原生&#xff1b;想使用 PostgreSQL 更强的事务与 JSON 支持&#xff1b;想统一团队数据库技术栈&#xff1b;纯粹为了尝试学习不同的数据库系统。 别担…...

影刀Fun叉鸟-2048

文章目录 仅为自动化演示&#xff0c;实际2048判定逻辑需要更加严谨 参考代码 # 使用提醒: # 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能 # 2. package包提供访问当前应用数据的功能&#xff0c;如获取元素、访问全局变量、获取资源文件等功能 # 3. 当此模块作…...

uni-app(2):页面

1 页面简介 uni-app项目中&#xff0c;一个页面就是一个符合Vue SFC规范的 vue 文件。 在 uni-app js 引擎版中&#xff0c;后缀名是.vue文件或.nvue文件。 这些页面均全平台支持&#xff0c;差异在于当 uni-app 发行到App平台时&#xff0c;.vue文件会使用webview进行渲染&…...

【spring】spring学习系列之十一:spring的事件监听

系列文章目录 文章目录 系列文章目录前言一、使用二、整体流程三、EventListenerMethodProcessor和DefaultEventListenerFactory1.EventListenerMethodProcessor2.DefaultEventListenerFactory3.ApplicationListenerDetector4.initApplicationEventMulticaster5.registerListen…...

代码随想录打卡|Day45 图论(孤岛的总面积 、沉没孤岛、水流问题、建造最大岛屿)

图论part03 孤岛的总面积 代码随想录链接 题目链接 视频讲解链接 思路&#xff1a;既然某个网格在边界上的岛屿不是孤岛&#xff0c;那么就把非 孤岛的所有岛屿变成海洋&#xff0c;最后再次统计还剩余的岛屿占据的网格总数即可。 dfs&#xff1a; import java.util.Scanner…...

AI人工智能——Matplotlib绘制各种数据可视化图表的基础方法

一、绘制图像基础 import matplotlib.pyplot as plt# 1、创建画布 plt.figure(figsize(20, 8), dpi100) # 2、绘制图像 x [1, 2, 3, 4, 5, 6] y [3, 5, 4, 3, 6, 1] plt.plot(x, y) # 3、显示图像 plt.show() 二、图像保存 import matplotlib.pyplot as plt# 1、创建画布 p…...

亚马逊AWS跑不动了?

5月2日&#xff0c;亚马逊公布了2025年第一季度的财报。财报数据显示&#xff0c;云计算业务增速放缓以及第二季度的指引低于预期。事实上&#xff0c;这并不是亚马逊AWS第一次增速放缓。 亚马逊AWS作为全球第一大云计算服务公司&#xff0c;这些年跟微软云、谷歌云等其他云计…...

PyTorch中cdist和sum函数使用详解

torch.cdist 是 PyTorch 中用于计算**两个张量之间的成对距离&#xff08;pairwise distance&#xff09;**的函数&#xff0c;常用于点云处理、图神经网络、相似性度量等场景。 基本语法 torch.cdist(x1, x2, p2.0)参数说明&#xff1a; 参数说明x1一个形状为 [B, M, D] 或 …...

PyTorch的基本操作

前言 为了方便大家学习&#xff0c;我整理了PyTorch全套学习资料&#xff0c;包含配套教程讲义和源码 除此之外还有100G人工智能学习资料 包含数学与Python编程基础、深度学习机器学习入门到实战&#xff0c;计算机视觉自然语言处理大模型资料合集&#xff0c;不仅有配套教程…...

分类算法 Kmeans、KNN、Meanshift 实战

任务 1、采用 Kmeans 算法实现 2D 数据自动聚类&#xff0c;预测 V180,V260 数据类别&#xff1b; 2、计算预测准确率&#xff0c;完成结果矫正 3、采用 KNN、Meanshift 算法&#xff0c;重复步骤 1-2 代码工具&#xff1a;jupyter notebook 视频资料 无监督学习&#xff…...

aws平台s3存储桶夸域问题处理

当我们收到开发反馈s3存在跨域问题 解决步骤&#xff1a; 配置 S3 存储桶的 CORS 设置&#xff1a; 登录到 AWS 管理控制台。转到 S3 服务。选择你存储文件的 存储桶。点击 权限 标签页。在 跨域资源共享&#xff08;CORS&#xff09;配置 部分&#xff0c;点击 编辑。 登陆…...

在Windows上安装Pygame 2.1.3:解决常见问题

在Windows系统上安装Pygame 2.1.3时&#xff0c;可能会遇到各种问题&#xff0c;例如网络问题或依赖安装失败。本文将详细介绍如何在Windows上成功安装Pygame 2.1.3&#xff0c;并解决常见的安装问题。 1. 前提条件 在开始安装之前&#xff0c;确保你的系统中已经安装了Pytho…...

linux中安装jdk(Java环境),tomcat

安装时候选择 tomcat 软件版本要与程序开发使用的版本一致。jdk 版本要进行与 tomcat 保持一致。 1. 系统环境说明 [root@bogon ~]# getenforce Disabled [root@bogon ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon …...

DeepSeek源码解构:从MoE架构到MLA的工程化实现

文章目录 **一、代码结构全景&#xff1a;从模型定义到分布式训练****二、MoE架构&#xff1a;动态路由与稀疏激活的工程化实践****1. 专家路由机制&#xff08;带负载均衡&#xff09;****数学原理&#xff1a;负载均衡损失推导** **三、MLA注意力机制&#xff1a;低秩压缩与解…...

国产linux系统(银河麒麟,统信uos)使用 PageOffice实现PDF文件加盖印章和签字功能

PageOffice 国产版 &#xff1a;支持信创系统&#xff0c;支持银河麒麟V10和统信UOS&#xff0c;支持X86&#xff08;intel、兆芯、海光等&#xff09;、ARM&#xff08;飞腾、鲲鹏、麒麟等&#xff09;、龙芯&#xff08;Mips、LoogArch&#xff09;芯片架构。 PageOffice支持…...

第四十三节:人脸检测与识别-人脸识别基础 (Eigenfaces, Fisherfaces, LBPH)

引言 人脸识别技术是计算机视觉领域最具应用价值的方向之一,广泛应用于安防监控、身份认证、人机交互等领域。本文将通过OpenCV框架,深入解析人脸检测与识别的核心算法(Eigenfaces/Fisherfaces/LBPH),并提供完整的代码实现。 第一部分:人脸检测基础 1.1 人脸检测原理 …...

面向恶劣条件的道路交通目标检测----大创自用(当然你也可以在里面学到很多东西)

全部内容梳理 目标检测的两个任务&#xff1a; 预测标签 边界框 语义分割 实力分割 一个是类别 一个是实例级别 分类任务把每个图像当作一张图片看待 所有解决方法是先生成候选区域 再进行分类 置信度&#xff1a; 包括对类别和边界框预测的自信程度 输出分类和IOU分数的…...

物联网相关词汇

物联网&#xff08;英文&#xff1a;Internet of Things&#xff0c;缩写&#xff1a;IoT&#xff09; specs 英[speks] 美[speks] 规格说明 topology 英[təpɒlədʒɪ] 拓扑结构 vertical 美 [ˈvɜrtɪk(ə)l] 英 [ˈvɜː(r)tɪk(ə)l] n.垂直线&#xff1b;垂直位…...

【net6】一文跑通前后端以及数据库,简单的天气系统管理(保姆入门)

一、前言 使用Vue3为前端&#xff0c;.net6为后端&#xff0c;连接postgreSQL数据库&#xff0c;连通前后端与数据库&#xff0c;实现最基础的天气管理系统的增删改查。 二、内容 目录 一、前言 二、内容 2.1 后端部分 2.1.1 在VS里面使用此模板创建项目 2.1.2 安装下列…...

宝塔安装的 MySQL 无法连接的情况及解决方案

宝塔安装的 MySQL 无法连接的情况及解决方案 宝塔面板是一款流行的服务器管理工具&#xff0c;其中集成的 MySQL 数据库有时会出现连接问题。本文详细介绍两种最常见的 MySQL 连接错误&#xff1a;“1130 - Host is not allowed to connect” 和 “1045 - Access denied”&…...

【iOS】分类、扩展、关联对象

分类、扩展、关联对象 前言分类扩展扩展和分类的区别关联对象key的几种用法流程 总结 前言 最近的学习中笔者发现自己对于分类、扩展相关知识并不是很熟悉&#xff0c;刚好看源码类的加载过程中发现有类扩展与关联对象详解。本篇我们来探索一下这部分相关知识&#xff0c;首先…...

计算机网络学习(一)—— OSI vs TCP/IP网络模型

一、OSI模型&#xff08;开放系统互联参考模型&#xff09; OSI&#xff08;Open Systems Interconnection&#xff09;模型由ISO&#xff08;国际标准化组织&#xff09;在1984年提出&#xff0c;用于标准化网络通信&#xff0c;它将网络通信分为七个层次&#xff1a; 层级名…...

【MySQL成神之路】MySQL查询用法总结

MySQL查询语句全面指南 一、基础查询语句 MySQL中select的基本语法形式 select 属性列表 from 表名和视图列表 [where 条件表达式] [group by 属性名[having 条件表达式]] [order by 属性名[asc|desc]] [limit <offset>,row count] 说明&#xff1a; where子句&…...

攻防世界——Web题 fakebook

首先测试网站的功能&#xff0c;当我注册一个账号时&#xff0c;发现这里的链接&#xff1a; 点进去看到URL&#xff1a; 感觉no这个地方可以尝试一下sql注入 推测应该是数字型注入 发现果然可以进行sql注入&#xff0c; 最终测得列数应该是4列&#xff0c;但当我尝试sql注入…...

【Java微服务组件】异步通信P2—Kafka与消息

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。 目录 引言Kafka与消息生产者发送消息到Kafka批处理发送设计消息的幂等信息确保消息送达acks配置…...

AI数字人一体机和智慧屏方案:开启智能交互新纪元

在当今这个信息化飞速发展的时代&#xff0c;AI技术正以前所未有的速度改变着我们的生活方式和工作模式。特别是在人机交互领域&#xff0c;AI数字人的出现不仅极大地丰富了用户体验&#xff0c;也为各行各业提供了前所未有的创新解决方案。本文将重点介绍由广州深声科技有限公…...