版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Java实现空指针后的猜拳游戏目录前言插件实现创建项目猜拳游戏实现游戏弹窗实现监听空指针异常安装插件演示最后
前言
java.lang.NullPointerException空指针异常可以说是Java程序最容易出现的异常了,我写了一个IDEA插件,每当程序出现空指针异常时就会弹出一个猜拳游戏窗口,该窗口不能直接关闭,只有当你游戏获胜时,窗口才会自动关闭。
作用是啥?
嘲讽罢了。
插件实现
创建项目
IDEA创建一个插件开发项目非常方便,已经内置了。
猜拳游戏实现
很简单。
实现原理:提供3个按钮,分别为石头、剪刀、布,对应值1、2、3,再为按钮绑定点击事件,按键点击之后调用处理函数传入对应的值即可。
处理函数handle(intselectedValue)的实现:利用随机数随机为电脑生成一个值与用户选择的值做比较,石头赢剪刀、剪刀赢布、布赢石头,然后显示游戏结果,用户获胜时会触发回调函数(用于关闭弹窗)。
packagecn.xeblog.mora.ui;
importjavax.swing.*;
importjava.awt.*;
importjava.util.Random;
*@authoranlingyi
*@date2025/8/118:02PM
publicclassMoraGameextendsJPanel{
*猜拳获胜调用
privateRunnablerunnable;
*提示标签
privateJLabeltipsLabel;
*结束标记
privatebooleanisOver;
publicMoraGame(Runnablerunnable){
setMinimumSize(newDimension(250,100));
setLayout(newBorderLayout());
this.runnable=runnable;
init();
privatevoidinit(){
this.tipsLabel=newJLabel("请出拳!",JLabel.CENTER);
this.tipsLabel.setPreferredSize(newDimension(250,50));
this.tipsLabel.setFont(newFont("",0,15));
this.tipsLabel.setForeground(newColor(255,128,128));
JButtonstoneButton=newJButton("石头");
JButtonshearsButton=newJButton("剪刀");
JButtonclothButton=newJButton("布");
stoneButton.setFocusPainted(false);
stoneButton.setBorderPainted(false);
stoneButton.addActionListener(l-handle(1));
shearsButton.setFocusPainted(false);
shearsButton.setBorderPainted(false);
shearsButton.addActionListener(l-handle(2));
clothButton.setFocusPainted(false);
clothButton.setBorderPainted(false);
clothButton.addActionListener(l-handle(3));
JPanelcenterPanel=newJPanel();
centerPanel.setPreferredSize(newDimension(250,30));
centerPanel.add(stoneButton);
centerPanel.add(shearsButton);
centerPanel.add(clothButton);
add(tipsLabel,BorderLayout.NORTH);
add(centerPanel,BorderLayout.CENTER);
privatevoidhandle(intselectedValue){
if(isOver){
return;
intvalue=newRandom().nextInt(3)+1;
booleanisWin=selectedValue==(value-1==03:value-1);
Stringresult;
if(isWin){
isOver=true;
result="你赢~";
}elseif(selectedValue==value){
result="平局~";
}else{
result="电脑赢~";
showTips("电脑-"+getText(value)+",你-"+getText(selectedValue)+","+result);
if(isWin){
newThread(()-{
try{
Thread.sleep(800);
this.runnable.run();
}catch(InterruptedExceptione){
thrownewRuntimeException(e);
}).start();
privateStringgetText(intvalue){
switch(value){
case1:
return"石头";
case2:
return"剪刀";
case3:
return"布";
return"";
privatevoidshowTips(Stringtips){
tipsLabel.setText(tips);
}
游戏弹窗实现
将窗口设置为不可关闭,传递弹窗关闭回调函数到游戏处理对象。
packagecn.xeblog.mora.ui;
importellij.openapi.ui.DialogWrapper;
importorg.jetbrains.annotations.NotNull;
importorg.jetbrains.annotations.Nullable;
importjavax.swing.*;
*@authoranlingyi
*@date2025/8/117:58PM
publicclassMoraDialogextendsDialogWrapper{
publicMoraDialog(){
super(true);
setTitle("猜拳游戏?");
setResizable(false);
setCrossClosesWindow(false);
init();
@Override
protected@NullableJComponentcreateCenterPanel(){
returnnewMoraGame(()-SwingUtilities.invokeLater(()-this.close(0)));
@Override
protected@NotNullAction[]createActions(){
returnnewAction[]{};
}
监听空指针异常
实现控制台过滤接口,判断控制台的输出内容是否包含java.lang.NullPointerException,如果包含则弹出游戏窗口。
packagecn.xeblog.mora.filter;
importcn.xeblog.mora.ui.MoraDialog;
importellij.execution.filters.ConsoleFilterProvider;
importellij.execution.filters.Filter;
importject.Project;
importorg.jetbrains.annotations.NotNull;
importjavax.swing.*;
*@authoranlingyi
*@date2025/8/1111:46PM
publicclassConsoleFilterimplementsConsoleFilterProvider{
@Override
publicFilter@NotNull[]getDefaultFilters(@NotNullProjectproject){
returnnewFilter[]{(line,entireLength)-{
if(line.contains("java.lang.NullPointerException")){
SwingUtilities.invokeLater(()-newMoraDialog().show());
returnnull;
}
注册过滤器
plugin.xml添加我们自定义的控制台过滤器实现。
extensionsdefaultExtensionNs="ellij"
consoleFilterProviderimplementation="cn.xeblog.mora.filter.ConsoleFilter"/
/extensions
安装插件
插件打包
Gradle-Tasks-build-assemble
打包之后的文件位于项目的build目录下:build/distributions/xxx.zip
插件安装
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年山东省青岛疗养院山东康复中心医护人员招聘笔试备考试题及答案详解
- 2026年山东省肿瘤医院医护人员招聘笔试参考题库及答案详解
- 2026年天津市武清区中医医院医护人员招聘笔试备考试题及答案详解
- 2026年九江市妇幼保健院医护人员招聘考试备考试题及答案详解
- 2026年长沙市第四医院医护人员招聘考试备考试题及答案详解
- 2026年天津铁路中心医院医护人员招聘考试参考试题及答案详解
- 2026年宁波市中医院医护人员招聘考试备考试题及答案详解
- 2026年洛阳市第二中医院医护人员招聘笔试备考题库及答案详解
- 2026年温州市中西医结合医院医护人员招聘考试参考题库及答案详解
- 2026年江西省精神病院医护人员招聘笔试参考试题及答案详解
- 2026年山东高考英语真题试卷(新课标卷)(+答案)
- DB4101∕T 145-2025 城市道路管线综合规划规范
- DB44∕T 2679-2025 数字政府网络安全指数指标体系
- 脑电课件教学课件
- (2026.01.01施行)《生态环境监测条例》解读与实施指南课件
- DB15∕T 3436-2024 西辽河流域油莎豆栽培技术规程
- 血透患者的血压管理
- 2025年大学《文化遗产-文化遗产概论》考试备考试题及答案解析
- 【初中数学】四分位数与箱线图课件 2025-2026学年北师大版八年级数学上册
- 河中石兽课件冲石原理
- 2025年下半年安徽省港航集团有限公司所属企业社会公开招聘22名考试参考试题及答案解析
评论
0/150
提交评论