Java JOptionPane按钮点击无响应求助:无法打开对应难度类
问题分析与解决方案
嘿,我一眼就发现了你代码里的问题——按钮点击没反应完全是因为条件判断逻辑出错了,咱们来拆解一下:
核心问题:误解了showOptionDialog的返回值
JOptionPane.showOptionDialog()返回的是一个整数索引,代表用户点击的按钮在options数组里的位置:
- 点击"Easy Mode"返回
0 - 点击"Medium Mode"返回
1 - 点击"Hard Mode"返回
2
但你的代码里把这个整数转成字符串STRn,然后去和options数组里的文本内容(比如"Easy Mode")做比较,这完全不匹配啊!比如用户点Easy Mode时,STRn是"0",和"Easy Mode"永远不会相等,所以条件分支根本不会执行,自然没反应。
修正后的代码
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class mainClass{ public static void main(String args[]){ JOptionPane frame = new JOptionPane(JOptionPane.INFORMATION_MESSAGE); Object[] options = {"Easy Mode","Medium Mode","Hard Mode"}; int n = JOptionPane.showOptionDialog( frame, "Which difficulty do you want to play on?", "Higher or Lower Game", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[2] ); // 直接用索引值判断,不用转字符串 if(n == 0){ // 对应Easy Mode EZMode ezmode = new EZMode(); ezmode.easyMode(); }else if(n == 1){ // 对应Medium Mode // 这里补上你的MediumMode类调用逻辑 // MediumMode mediumMode = new MediumMode(); // mediumMode.mediumMode(); }else if(n == 2){ // 对应Hard Mode // 这里补上你的HardMode类调用逻辑 // HardMode hardMode = new HardMode(); // hardMode.hardMode(); } } }
额外小建议
- 为了让代码更易读,可以用常量定义索引:
这样判断条件就变成final int EASY_MODE = 0; final int MEDIUM_MODE = 1; final int HARD_MODE = 2;if(n == EASY_MODE),可读性会好很多。 - 记得补上Medium和Hard模式的调用逻辑,你原来的代码里这两个分支是空的哦。
内容的提问来源于stack exchange,提问作者Swize
相关产品推荐
相关产品推荐

