【无处躲藏的图片】和【时隐时现的图片】

文章目录

  • 一、效果
  • 二、源码
    • 1. pom依赖
    • 2. 核心源码1
    • 3. 核心源码2

一、效果

在这里插入图片描述

二、源码

1. pom依赖

        <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.9</version></dependency><!-- unirest --><dependency><groupId>com.konghq</groupId><artifactId>unirest-java</artifactId><version>3.14.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version><scope>provided</scope></dependency>

2. 核心源码1


import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;import org.apache.commons.lang3.RandomUtils;import kong.unirest.HttpResponse;
import kong.unirest.Unirest;
import lombok.extern.slf4j.Slf4j;/*** * 图片展示窗口* * @author 00fly* @version [版本号, 2023年3月3日]* @see [相关类/方法]* @since [产品/模块版本]*/
@Slf4j
public class ImageShowMove extends JDialog
{private static final long serialVersionUID = -8771307087530903406L;private static ImageShowMove dialog;private static Robot myRobot;public ImageShowMove(BufferedImage image){super();setTitle("图片");setSize(image.getWidth(), image.getHeight() + 30);Dimension screenSize = getToolkit().getScreenSize();Dimension dialogSize = getSize();dialogSize.height = Math.min(screenSize.height, dialogSize.height);dialogSize.width = Math.min(screenSize.width, dialogSize.width);setLocation(RandomUtils.nextInt(0, screenSize.width - dialogSize.height), RandomUtils.nextInt(0, screenSize.height - dialogSize.width));add(new JLabel(new ImageIcon(image)));setVisible(true);setResizable(false);setAlwaysOnTop(true);setDefaultCloseOperation(HIDE_ON_CLOSE); // 隐藏}/*** 打开图片* * @param resource*/private static void openImage(BufferedImage image){try{dialog = new ImageShowMove(image);myRobot = new Robot();}catch (AWTException e){log.error(e.getMessage(), e);}}/*** 位置移动,鼠标移动、点击*/private static void move(){Dimension screenSize = dialog.getToolkit().getScreenSize();Dimension dialogSize = dialog.getSize();dialogSize.height = Math.min(screenSize.height, dialogSize.height);dialogSize.width = Math.min(screenSize.width, dialogSize.width);dialog.setVisible(true); // 重新显示dialog.setLocation(RandomUtils.nextInt(0, screenSize.width - dialogSize.height), RandomUtils.nextInt(0, screenSize.height - dialogSize.width));// 移动鼠标myRobot.mouseMove(dialog.getX() + RandomUtils.nextInt(0, dialog.getWidth()), dialog.getY() + RandomUtils.nextInt(0, dialog.getHeight()));// 模拟按下鼠标左键后释放myRobot.mousePress(KeyEvent.BUTTON1_DOWN_MASK);myRobot.mouseRelease(KeyEvent.BUTTON1_DOWN_MASK);}public static void main(String[] args)throws IOException{HttpResponse<byte[]> response = Unirest.get("https://00fly.online/upload/2019/02/201902262129360274AKuFZcUfip.jpg").asBytes();BufferedImage image = ImageIO.read(new ByteArrayInputStream(response.getBody()));openImage(image);Executors.newScheduledThreadPool(2).scheduleAtFixedRate(() -> move(), 2, 10, TimeUnit.SECONDS);}
}

3. 核心源码2


import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;import org.apache.commons.lang3.RandomUtils;import kong.unirest.HttpResponse;
import kong.unirest.Unirest;
import lombok.extern.slf4j.Slf4j;/*** * 图片展示窗口* * @author 00fly* @version [版本号, 2023年3月3日]* @see [相关类/方法]* @since [产品/模块版本]*/
@Slf4j
public class ImageShowDispose extends JDialog
{private static final long serialVersionUID = -7240357454480002551L;public ImageShowDispose(BufferedImage image){super();setTitle("图片");setSize(image.getWidth(), image.getHeight() + 30);Dimension screenSize = getToolkit().getScreenSize();Dimension dialogSize = getSize();dialogSize.height = Math.min(screenSize.height, dialogSize.height);dialogSize.width = Math.min(screenSize.width, dialogSize.width);setLocation(RandomUtils.nextInt(0, screenSize.width - dialogSize.height), RandomUtils.nextInt(0, screenSize.height - dialogSize.width));add(new JLabel(new ImageIcon(image)));setVisible(true);setResizable(false);setAlwaysOnTop(true);setDefaultCloseOperation(DISPOSE_ON_CLOSE);}/*** 打开图片后延时销毁* * @param image*/private static void openImage(BufferedImage image){try{ImageShowDispose dialog = new ImageShowDispose(image);Robot myRobot = new Robot();// 移动鼠标myRobot.mouseMove(dialog.getX() + RandomUtils.nextInt(0, dialog.getWidth()), dialog.getY() + RandomUtils.nextInt(0, dialog.getHeight()));// 模拟按下鼠标左键后释放myRobot.mousePress(KeyEvent.BUTTON1_DOWN_MASK);myRobot.mouseRelease(KeyEvent.BUTTON1_DOWN_MASK);TimeUnit.SECONDS.sleep(8);dialog.dispose();}catch (AWTException | InterruptedException e){log.error(e.getMessage(), e);}}public static void main(String[] args)throws IOException{HttpResponse<byte[]> response = Unirest.get("https://00fly.online/upload/2019/02/201902262129360274AKuFZcUfip.jpg").asBytes();BufferedImage image = ImageIO.read(new ByteArrayInputStream(response.getBody()));Executors.newScheduledThreadPool(2).scheduleAtFixedRate(() -> openImage(image), 2, 10, TimeUnit.SECONDS);}
}

有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/450404.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3基础入门以及常用api使用

setup setup 的返回值可以是函数 data(){ return { a:111, c:this.name } }, setup(){ let name 1111 return ()> 哈哈哈 }//结果页面就是会显示 哈哈哈setup和 OptionsAPI关系 data能和setup能同时存在&#xff0c;但不建议 data能读到setup里边的数据 setup是最早的生命…

【二刷hot-100】day2

目录 1.无重复字符的最长子串 2.找到字符串中所有字母异位词 3.和为 K 的子数组 4.滑动窗口最大值 1.无重复字符的最长子串 class Solution {public int lengthOfLongestSubstring(String s) {Map<Character,Integer> dict new HashMap<>();int ret0;int i-1;for…

使用 GoZero 框架实现一个简单的course课程class系统

使用 GoZero 框架实现一个简单的课程增删改查&#xff08;CRUD&#xff09;功能需要进行以下步骤&#xff1a;设置 GoZero 项目、定义数据模型、创建相应的 API 接口以及实现 CRUD 操作。下面是一个示例代码&#xff0c;包括基本的课程管理功能。 ### 1. 安装 GoZero 首先&…

基于SSM党务政务服务热线管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;部门管理&#xff0c;办事信息管理&#xff0c;信息记录管理&#xff0c;系统管理 前台账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;部门&#xff0c;信息…

十月编程语言排行榜~

前言&#xff1a;TIOBE编程语言排行榜通过分析全球开发者的活动、代码搜索和问答社区的流量&#xff0c;提供了编程语言受欢迎度的动态图景。该指数是技术趋势的风向标&#xff0c;揭示了哪些编程语言在技术领域占据主导地位&#xff0c;哪些语言正在快速崛起或逐渐衰退。 ✨✨…

骨传导耳机哪款比较值得入手?五款热门机型实测内容分享!

在贴吧、论坛、知乎等社区网站上&#xff0c;大家可能经常看到用户吐槽、讨论骨传导耳机哪种好等话题。很多人反映&#xff0c;由于使用了不适合的骨传导耳机&#xff0c;出现了听力不适、佩戴不稳等诸多问题。作为一名有着丰富经验的数码测评师&#xff0c;我对此问题非常关注…

考研数据结构——C语言实现二叉树前,中,后序非递归遍历

定义二叉树节点&#xff08;BTree&#xff09;&#xff1a; ElemType value&#xff1a;存储节点的值。struct BTree* LeftChild&#xff1a;指向左子节点的指针。struct BTree* RightChild&#xff1a;指向右子节点的指针。 节点访问函数&#xff08;visit&#xff09;&#x…

Linux SSH无密码使用私钥远程登录连接详细配置流程

文章目录 前言1. Linux 生成SSH秘钥对2. 修改SSH服务配置文件3. 客户端秘钥文件设置4. 本地SSH私钥连接测试5. Linux安装Cpolar工具6. 配置SSHTCP公网地址7. 远程SSH私钥连接测试8. 固定SSH公网地址9. 固定SSH地址测试 前言 本文将详细介绍如何将Linux SSH服务与cpolar相结合&…

【算法】深入理解布隆过滤器

1. 什么是布隆过滤器&#xff1f; 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种空间效率极高的概率型数据结构&#xff0c;用于检测某个元素是否在一个集合中。与常见的数据结构如哈希表不同&#xff0c;布隆过滤器无法删除元素&#xff0c;并且会存在一定的误判率&…

实操部署amis-admin

当需要做一个web服务的时候&#xff0c;前端的实现很令我头疼。搜了一圈前端低代码框架后&#xff0c;注意到百度贡献的amis&#xff0c;通过json来写前端&#xff0c;很酷啊。不得不说&#xff0c;一个好的demo项目&#xff0c;真的能让人迅速进入状态&#xff0c;比直接看文档…

c++常用库函数

一.sort排序 快排的改进算法&#xff0c;评价复杂度为(nlogn). 1.用法 sort(起始地址&#xff0c;结束地址下一位&#xff0c;*比较函数) [起始地址&#xff0c;结束地址) (左开右闭) #include<bits/stdc.h> using namespace std; int main() {//sortvector<int&g…

基础sql

在执行删除操作之前&#xff0c;建议先运行一个 SELECT 查询来确认你要删除的记录。这可以帮助你避免误删数据。 删除字段id默认值为空字符串的所有数据 delete from users where id ; 删除字段id默认值为null的所有数据 delete from users where id is null; 删除字段upd…

msvcp140.dll重新安装的解决方法,msvcp140.dll丢失快速修复教程

msvcp140.dll丢失的问题是许多电脑用户经常遇到的问题。msvcp140.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;这个软件包包含了许多Windows系统运行所需的重要文件。当msvcp140.dll丢失时&#xff0c;可能会导致许多应用程序无法正常运行&#xff0c…

基于华为云智慧生活生态链设计的智能鱼缸

一. 引言 1.1 项目背景 随着智能家居技术的发展和人们对高品质生活的追求日益增长&#xff0c;智能鱼缸作为一种结合了科技与自然美的家居装饰品&#xff0c;正逐渐成为智能家居领域的新宠。本项目旨在设计一款基于华为云智慧生活生态链的智能鱼缸&#xff0c;它不仅能够提供…

初阶数据结构【2】--顺序表(详细且通俗易懂,不看一下吗?)

本章概述 线性表顺序表顺序表问题与思考彩蛋时刻&#xff01;&#xff01;&#xff01; 线性表 概念&#xff1a;一些在逻辑上成线性关系的数据结构的集合。线性表在逻辑上一定成线性结构&#xff0c;在物理层面上不一定成线性结构。常见的线性表&#xff1a;顺序表&#xff0…

学习文档(6)

Redis数据类型 Redis 常用的数据类型有哪些&#xff1f; Redis 中比较常见的数据类型有下面这些&#xff1a; 5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散…

影楼即将倒闭!!!!stable diffusion comfyui制作:AI人像摄影专业工作流

最近我们在学习ComfyUI&#xff0c;并用它搭建的摄影写真工作流&#xff0c;只需几张照片即可生成可交付的艺术写真照。 AI写真有以下好处&#xff1a; 创意无限&#xff1a;AI写真可以创造出超越现实的场景和效果&#xff0c;为用户提供更多的创意空间。用户可以通过简单的输…

MySQL 读写分离

优质博文&#xff1a;IT-BLOG-CN 一、背景 随着机票业务不断增长&#xff0c;订单库的读性能遇到了挑战&#xff0c;因此对订单库进行读写分离操作。主要目的是提高数据库的并发性能和可扩展性。当系统的所有写操作效率尚可&#xff0c;读数据请求效率较低时&#xff0c;比如…

快速解决Windows端口被占用

检查占用的端口号,显示9210端口被占用 使用运行打开cmd&#xff0c;直接输入如下命令 netstat -ano | find "9210"可以看到 9210端口执行的进程是PID为26836 知道PID后打开电脑的任务管理器-详细信息,找到PID是26836的进程,可以看到是QQ,关掉就解决了

微软开源项目 Detours 详细介绍与使用实例分享

目录 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours应用场景 5、Detours兼容性 6、Detours具体使用方法 7、Detours使用实例 - 使用Detours拦截系统库中的UnhandledExceptionFilter接口,实现对程序异常的拦截 C++软件异常排查从入门到精通系列教程…