IDEA 中的神奇插件:防沉迷、防猝死 ...
作者 | 邁克爾嘿嘿

叛逆的仔:不聽老板的話,還要用行動(dòng)給老板來個(gè)響亮耳光!
前言
當(dāng)初年少懵懂,那年夏天填志愿選專業(yè),父母聽其他長(zhǎng)輩說選擇計(jì)算機(jī)專業(yè)好。從那以后,我的身上就有了計(jì)院深深的烙印。從寢室到機(jī)房,從機(jī)房到圖書館,C、C++、Java、只要是想寫點(diǎn)自己感興趣的東西,一坐就是幾個(gè)小時(shí),但那時(shí)年輕,起身,收拾,一路小跑會(huì)女神,輕輕松松。現(xiàn)在工作了,毫無意外的做著開發(fā)的工作,長(zhǎng)時(shí)間久坐。寫代碼一忙起來就忘了起來活動(dòng)一下,也不怎么喝水。經(jīng)常等到忙完了就感覺腰和腿不舒服。直到今年的體檢報(bào)告一下來,才幡然醒悟:沒有一個(gè)好身體,就不能好好打工,讓老板過上他自己想要的生活了.
試過用手機(jī)提醒自己,但是沒用。小米手環(huán)的久坐提醒功能也開著,有時(shí)候?qū)懘a正入神的,時(shí)間到了也就點(diǎn)一下就關(guān)了,還是沒什么作用。所以我想究竟是我太賴了,還是用Idea寫代碼容易沉迷,總之不可能是改需求有意思。所以元旦節(jié)打算為自己開發(fā)一款小小的Idea防沉迷插件,我叫她StopCodin。她應(yīng)該可以設(shè)置每隔多少分鐘,就彈出一個(gè)提醒對(duì)話框,一旦對(duì)話框彈出來,idea的代碼編輯框就自動(dòng)失去了焦點(diǎn),什么都不能操作,到這還不算完,關(guān)鍵是這個(gè)對(duì)話框得關(guān)不了,并且還顯示著休息倒計(jì)時(shí),還有即使我修改了系統(tǒng)時(shí)間,這個(gè)倒計(jì)時(shí)也依然有效,除非我打開任務(wù)管理器,關(guān)閉Idea的進(jìn)程,然后再重新啟動(dòng)Idea。但是想一下想,idea都都關(guān)了,還是休息一下吧。
下面就介紹一下她簡(jiǎn)單的使用教程和開發(fā)教程
安裝使用教程
安裝
在idea中直接搜索安裝StopCoding插件(官方已經(jīng)審核通過)

內(nèi)網(wǎng)開發(fā)的小伙伴 可以下載之后進(jìn)行本地安裝 下載地址(https://github.com/jogeen/StopCoding/releases/tag/20210104-V1.0)
本地安裝:

使用
Step1. 然后在菜單欄中tools->StopCoding

Step2. 設(shè)置適合你的參數(shù)然后保存。

Step3. 然后快樂的Coding吧,再不用擔(dān)心自己會(huì)沉迷了。工作時(shí)間結(jié)束,她會(huì)彈出下框進(jìn)行提醒,當(dāng)然,這個(gè)框是關(guān)不掉的.只有你休息了足夠的時(shí)間它才會(huì)自動(dòng)關(guān)閉.

開發(fā)教程
這個(gè)插件非常的簡(jiǎn)約,界面操作也很簡(jiǎn)單。所使用的技術(shù)基本上都是java的基礎(chǔ)編程知識(shí)。所以小伙伴感興趣的話,一起看看吧。
技術(shù)范圍
插件工程的基本結(jié)構(gòu) Swing 主要負(fù)責(zé)兩個(gè)對(duì)話框的交互 Timer 作為最基本的定時(shí)器選擇
插件工程結(jié)構(gòu)

plugin.xml
這是插件工程的核心配置文件
data包 SettingData,配置信息對(duì)應(yīng)model DataCenter,作為運(yùn)行時(shí)的數(shù)據(jù)中心,都是些靜態(tài)的全局變量 service TimerService 這個(gè)定時(shí)計(jì)算的核心代碼 task RestTask 休息時(shí)的定時(shí)任務(wù) WorkTask 工作時(shí)的定時(shí)任務(wù) ui SettingDialog 設(shè)置信息的對(duì)話框 TipsDialog 休息時(shí)提醒的對(duì)話框 StopCodingSettingAction 啟動(dòng)入口的action
Swing
其實(shí)在idea中開發(fā)Swing項(xiàng)目的界面非常簡(jiǎn)單。因?yàn)閕dea提供了一系列可視化的操作,以及控件布局的拖拽。接下來就簡(jiǎn)單的介紹一下對(duì)話框的創(chuàng)建過程和添加事件。
創(chuàng)建對(duì)話框
Step1

Step2

Step3

注:這里并沒有詳細(xì)的展開Swing的講解,因?yàn)榻缑娴倪@個(gè)東西,需要大家多去自己實(shí)踐。這里就不做手冊(cè)式的贅述了。
添加事件
其實(shí),剛才創(chuàng)建的這個(gè)對(duì)話框里的兩個(gè)按鈕都是默認(rèn)已經(jīng)創(chuàng)建好了點(diǎn)擊事件的。
public class TestDialog extends JDialog {
private JPanel contentPane;
private JButton buttonOK;
private JButton buttonCancel;
public TestDialog() {
setContentPane(contentPane);
setModal(true);
getRootPane().setDefaultButton(buttonOK);
buttonOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
onOK();
}
}); //這是給OK按鈕綁定點(diǎn)擊事件的監(jiān)聽器
buttonCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
onCancel();
}
});//這是給取消按鈕綁定點(diǎn)擊事件的監(jiān)聽器
//其他代碼
}
當(dāng)然我們也可以其它任何控件去創(chuàng)建不同的事件監(jiān)聽器。這里可以通過界面操作創(chuàng)建很多種監(jiān)聽器,只要你需要,就可以使用。
step1

16 歲高中生成功在 iPhone 7 上安裝 Ubuntu 20.04 桌面!
step2

Timer定時(shí)器
在這個(gè)插件里面,需要用到定時(shí)的功能,同時(shí)去計(jì)算公國(guó)和休息的時(shí)間。所以使用JDK自帶的Timer,非常的方便。下面我Timer的常用的api放在這里,就清楚它的使用了。
構(gòu)造方法

成員防范

Spring Initializr中生成的mvnw是干嗎的?
主要是schedule去添加一個(gè)定時(shí)任務(wù),和使用cancel去取消任務(wù)停止定時(shí)器。
最后
相信有了這些基本介紹,感謝興趣的小伙伴想去看看源碼和嘗試自己寫一個(gè)小插件就沒什么大問題了。不說了,我得休息了。希望這個(gè)插件能幫到作為程序員得你,和這篇文章對(duì)你有一點(diǎn)點(diǎn)啟發(fā)。當(dāng)然麻煩小伙伴點(diǎn)個(gè)贊,鼓勵(lì)一下打工人。
源碼地址(https://github.com/jogeen/StopCoding)
文章來源:https://juejin.cn/post/6914083794806898695
—————END————— 推薦閱讀:
IDEA 永久注冊(cè)碼來了!!! Nginx 這個(gè)功能就厲害了! 強(qiáng)烈推薦:一個(gè)比 Nginx 功能更強(qiáng)大的 Web 服務(wù)器 基于SpringBoot 的CMS系統(tǒng),拿去開發(fā)企業(yè)官網(wǎng)真香 33 個(gè) IDEA 最牛配置,寫代碼太爽了! 不要再封裝各種Util工具類了,這個(gè)神級(jí)框架值得擁有!
最近面試BAT,整理一份面試資料《Java面試BAT通關(guān)手冊(cè)》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。 獲取方式:關(guān)注公眾號(hào)并回復(fù) java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。 明天見(??ω??)??
