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

idea插件开发的第二天-写一个时间查看器

介绍

Demo说明

  • 本文基于maven项目开发,idea版本为2022.3以上,jdk为1.8
  • 本文在Tools插件之上进行开发

Tools插件说明

  • Tools插件是一个Idea插件,此插件提供统一Spi规范,极大的降低了idea插件的开发难度,并提供开发者模块,可以极大的为开发者开发此插件提供便利
  • Tools插件安装需要idea2022.3以上版本
  • 插件下载连接: https://download.csdn.net/download/qq_42413011/89702325
  • sdk下载连接: https://download.csdn.net/download/qq_42413011/89702330
  • pojo-serializer插件: https://gitee.com/myprofile/pojo-serializer

正文

打开上一篇文章项目

在这里插入图片描述

调整代码如下

package com.lhstack.aaa;import com.lhstack.tools.plugins.IPlugin;import javax.imageio.ImageIO;
import javax.swing.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;public class PluginImpl implements IPlugin {private final Map<String, JLabel> cache = new HashMap<>();private final ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1, new ThreadFactory() {@Overridepublic Thread newThread(Runnable r) {Thread thread = new Thread(r);thread.setName("Demo-Plugin-Scheduled-Thread #" + thread.getId());return thread;}});@Overridepublic JComponent createPanel(String projectHash) {return cache.computeIfAbsent(projectHash, key -> {return new JLabel(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")),JLabel.CENTER);});}@Overridepublic void closeProject(String projectHash) {//关闭项目,移除项目对应打开的组件cache.remove(projectHash);}@Overridepublic void unInstall() {//清除缓存cache.clear();//停止线程池scheduledExecutorService.shutdown();}@Overridepublic void install() {//初始化任务调度,更新所有组件时间scheduledExecutorService.schedule(new Runnable() {@Overridepublic void run() {String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));cache.forEach((key, value) -> value.setText(date));scheduledExecutorService.schedule(this, 200, TimeUnit.MILLISECONDS);}}, 200, TimeUnit.MILLISECONDS);}@Overridepublic Icon pluginIcon() {try {return new ImageIcon(ImageIO.read(Objects.requireNonNull(PluginImpl.class.getClassLoader().getResourceAsStream("DEMO-48x48.png"))));} catch (Throwable e) {throw new RuntimeException(e);}}@Overridepublic Icon pluginTabIcon() {try {return new ImageIcon(ImageIO.read(Objects.requireNonNull(PluginImpl.class.getClassLoader().getResourceAsStream("DEMO-16x16.png"))));} catch (Throwable e) {throw new RuntimeException(e);}}@Overridepublic String pluginName() {return "Demo";}@Overridepublic String pluginDesc() {return "这是一个Demo插件描述";}@Overridepublic String pluginVersion() {return "0.0.1";}
}

使用插件开发模块运行,查看效果

在这里插入图片描述

jconsole查看线程运行情况

在这里插入图片描述
停止运行,查看线程情况
在这里插入图片描述
线程释放了
在这里插入图片描述

打包安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多个项目情况
在这里插入图片描述


http://www.mrgr.cn/news/21811.html

相关文章:

  • VMware时提示系统尚未修改安装失败
  • android系统源码12 修改默认桌面壁纸--SRO方式
  • 【AcWing】852. spfa判断负环
  • Cortex-A7:ARM官方推荐的嵌套中断实现机制
  • GitHub每日最火火火项目(9.7)
  • 二、Maven工程的创建--JavaSEJavaEE
  • Kafka 分布式消息系统详细介绍
  • Android之外部存储可以访问哪些文件夹
  • SpringBoot开发——整合JDBC
  • 自定义view中常用到哪些方法作用分别是什么
  • web登录校验
  • YOLOv8改进 | Conv篇 | YOLOv8引入DWR
  • 改写二进制文件
  • The One You Love 你爱的那个人
  • 数据库面试题学习
  • 后仿真中《建立违例和保持违例》你死板思维了吗?
  • 概率DP (由一道绿题引起的若干问题。目前为一些老题,蒟蒻的尝试学习1.0)
  • 基于Spring Boot的火车订票管理系统
  • 【Unity小技巧】物体遮挡轮廓描边效果
  • springboot数据库连接由localhost改成IP以后访问报错500(2024/9/7