Java实现空指针后的猜拳游戏_第1页
Java实现空指针后的猜拳游戏_第2页
Java实现空指针后的猜拳游戏_第3页
Java实现空指针后的猜拳游戏_第4页
Java实现空指针后的猜拳游戏_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论