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

2024-09-07 23:52

本文主要是介绍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查看线程运行情况

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

打包安装

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

这篇关于idea插件开发的第二天-写一个时间查看器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146522

相关文章

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间