设置 checkbox/radiobox 以向 JButton 添加额外的 cmd 参数?

Set checkbox/radiobox to add additional cmd params to a JButton?

就这样,我有很多 checkboxes/radio个盒子,首先,主要的jButton是"RunGameButton"然后我有这里的代码

private void RunGameButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
    try
    {
       Process process = Runtime.getRuntime().exec("cmd.exe /C start C:\mygame\game.exe");
    }
    catch(IOException e)
    {
    }

} 

例如,我有一个名为 "NoMonstersBox" 的复选框,选中后,它会将 -nomonsters 命令添加到 mygame.exe 的启动到 "RunGameButton" 的代码中像这样

private void RunGameButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
    try
    {
       Process process = Runtime.getRuntime().exec("cmd.exe /C start C:\mygame\game.exe -nomonsters");
    }
    catch(IOException e)
    {
    }

} 

但是,我几乎是一个新手,我不知道把什么放在哪里,或者把什么放在哪里。广泛的谷歌搜索没有任何用处。

编辑

这是我要求的当前位

private void RunGameButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
try
{
   if(CheatsBox.isSelected())
   {
       Process process = Runtime.getRuntime().exec("cmd.exe /C start C:\mygame\game.exe +SV_CHEATS 1");
   }
   if(NoMonstersBox.isSelected())
   {
       Process process = Runtime.getRuntime().exec("cmd.exe /C start C:\mygame\game.exe -nomonsters");
   }
   else
   {
       Process process = Runtime.getRuntime().exec("cmd.exe /C start C:\mygame\game.exe");    
   }
}
catch(IOException e)
{
    //Log Error
} 
}                       

假设您的 NoMonsters 标志由名称为 chkNoMonsters 的复选框表示,您可以做的是增加 RunGameButtonActionPerformed 事件处理程序以获取复选框的状态考虑,像这样:

private void RunGameButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
    try
    {
       if(chkNoMonsters.isSelected())
       {
           Process process = Runtime.getRuntime().exec("cmd.exe /C start C:\mygame\mygame.exe -nomonsters");
       }
       else
       {
           Process process = Runtime.getRuntime().exec("cmd.exe /C start C:\mygame\game.exe");    
       }
    }
    catch(IOException e)
    {
        //Log Error
    }
} 

另请注意,捕获异常而不对它们做任何事情被认为是一种后备做法。您通常做的至少是记录它们,这样您就知道有什么东西坏了。

编辑:根据您的问题编辑,主要问题是您有两组条件组。第一组由 if 语句表示:if(CheatsBox.isSelected()),第二组由 if(NoMonstersBox.isSelected())... else... 表示。

为确保您的游戏只运行一次,您需要将两组条件组合并为一组。为此,您只需将 if(NoMonstersBox.isSelected()) 替换为 else if(NoMonstersBox.isSelected())。这将确保只选择 3 个条件中的一个。

然而,这将使您的选择相互排斥,这意味着您无法同时启用 NoMonsters+SV_CHEATS 1 标志。要解决这个问题,您可以使用 StringBuilder class,像这样:

private void RunGameButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
    try
    {
       //Basic game launching command.
       StringBuilder sb = new StringBuilder("cmd.exe /C start C:\mygame\game.exe");
       if(chkNoMonsters.isSelected())
       {
           //Add the No Monsters Flag
           sb.append(" -nomonsters");
       }
       if(CheatsBox.isSelected())
       {
           //Add the Cheats Flag
           sb.append(" +SV_CHEATS 1");           
       }

       //Launch the game
       Process process = Runtime.getRuntime().exec(sb.toString());
    }
    catch(IOException e)
    {
        //Log Error
    }
}