You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:54:34