2017-03-17 111 views
0

我正在尝试制作GPA计算器应用程序。我已经掌握了所有必要的代码。它只是当我试图做一个GUI时,我得到一个我根本不理解的错误代码。JOptionPane错误Java

代码:

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Scanner; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class Caculator{ 

    public static void main(String args[]){ 

     Scanner ream = new Scanner(System.in); 
     String firstnumber = ""; 
     double firstdec; 
     String secondnumber = ""; 
     double seconddec; 
     String thirdnumber = ""; 
     double thirddec; 
     String fourthnumber = ""; 
     double fourthdec; 
     String fifthnumber = ""; 
     double fifthdec; 
     String sixthnumber = ""; 
     double sixthdec; 
     String seventhnumber = ""; 
     double seventhdec; 
     String eighthnumber = ""; 
     double eighthdec; 
     double total = 0; 
     JTextField GPA = new JTextField(); 

    JFrame panel = new JFrame(); 
    panel.add(new JLabel("First Grade")); 
    panel.add(new JLabel("Second Grade")); 
    panel.add(new JTextField(firstnumber)); 
    panel.add(new JTextField(secondnumber)); 
    panel.add(new JLabel("Third Grade")); 
    panel.add(new JLabel("Fourth Grade")); 
    panel.add(new JTextField(thirdnumber)); 
    panel.add(new JTextField(fourthnumber)); 
    panel.add(new JLabel("Fifth Grade")); 
    panel.add(new JLabel("Sixth Grade")); 
    panel.add(new JTextField(fifthnumber)); 
    panel.add(new JTextField(sixthnumber)); 
    panel.add(new JLabel("Seventh Grade")); 
    panel.add(new JLabel("Eighth Grade")); 
    panel.add(new JTextField(seventhnumber)); 
    panel.add(new JTextField(eighthnumber)); 

    int result = JOptionPane.showConfirmDialog(null, panel, "Quesion", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 
    switch (result) { 

     case JOptionPane.OK_OPTION: 
      firstnumber = ream.nextLine(); 

      if (firstnumber.equals("A+")) { 

      firstdec = 4.4; 
       total += firstdec; 

      } else 

      if (firstnumber.equals("A")) { 

       firstdec = 4.0; 
       total += firstdec; 

      } else 

      if (firstnumber.equals("A-")) { 

       firstdec = 3.7; 
       total += firstdec; 

      } else 

      if (firstnumber.equals("B+")) { 

       firstdec = 3.4; 
       total += firstdec; 

      } else 

      if (firstnumber.equals("B")) { 

       firstdec = 3.0; 
       total += firstdec; 

      } else 

      if (firstnumber.equals("B-")) { 

       firstdec = 2.7; 
       total += firstdec; 

      } else 

      if (firstnumber.equals("C+")) { 

       firstdec = 2.4; 
       total += firstdec; 

      } else 

      if (firstnumber.equals("C")) { 

       firstdec = 2.0; 
       total += firstdec; 

      } else 

      if (firstnumber.equals("C-")) { 

       firstdec = 1.7; 
       total += firstdec; 

      } else 

      if (firstnumber.equals("F")) { 

       firstdec = 0; 
       total += firstdec; 

      } 

      secondnumber = ream.nextLine(); 

      if (secondnumber.equals("A+")) { 

       seconddec = 4.4; 
       total += seconddec; 

      } else 

      if (secondnumber.equals("A")) { 

       seconddec = 4.0; 
       total += seconddec; 

      } else 

      if (secondnumber.equals("A-")) { 

       seconddec = 3.7; 
       total += seconddec; 

      } else 

      if (secondnumber.equals("B+")) { 

       seconddec = 3.4; 
       total += seconddec; 

      } else 

      if (secondnumber.equals("B")) { 

       seconddec = 3.0; 
       total += seconddec; 

      } else 

      if (secondnumber.equals("B-")) { 

       seconddec = 2.7; 
       total += seconddec; 

      } else 

      if (secondnumber.equals("C+")) { 

       seconddec = 2.4; 
       total += seconddec; 

      } else 

      if (secondnumber.equals("C")) { 

       seconddec = 2.0; 
       total += seconddec; 

      } else 

      if (secondnumber.equals("C-")) { 

       seconddec = 1.7; 
       total += seconddec; 

      } else 

      if (secondnumber.equals("F")) { 

       seconddec = 0; 
       total += seconddec; 

      } 

      thirdnumber = ream.nextLine(); 

      if (thirdnumber.equals("A+")) { 

       thirddec = 4.4; 
       total += thirddec; 

      } else 

      if (thirdnumber.equals("A")) { 

       thirddec = 4.0; 
       total += thirddec; 

      } else 

      if (thirdnumber.equals("A-")) { 

       thirddec = 3.7; 
       total += thirddec; 

      } else 

      if (thirdnumber.equals("B+")) { 

       thirddec = 3.4; 
       total += thirddec; 

      } else 

      if (thirdnumber.equals("B")) { 

       thirddec = 3.0; 
       total += thirddec; 

      } else 

      if (thirdnumber.equals("B-")) { 

       thirddec = 2.7; 
       total += thirddec; 

      } else 

      if (thirdnumber.equals("C+")) { 

       thirddec = 2.4; 
       total += thirddec; 

      } else 

      if (thirdnumber.equals("C")) { 

       thirddec = 2.0; 
       total += thirddec; 

      } else 

      if (thirdnumber.equals("C-")) { 

       thirddec = 1.7; 
       total += thirddec; 

      } else 

      if (thirdnumber.equals("F")) { 

       thirddec = 0; 
       total += thirddec; 

      } 

      fourthnumber = ream.nextLine(); 

      if (fourthnumber.equals("A+")) { 

       fourthdec = 4.4; 
       total += fourthdec; 

      } else 

      if (fourthnumber.equals("A")) { 

       fourthdec = 4.0; 
       total += fourthdec; 

      } else 

      if (fourthnumber.equals("A-")) { 

       fourthdec = 3.7; 
       total += fourthdec; 

      } else 

      if (fourthnumber.equals("B+")) { 

       fourthdec = 3.4; 
       total += fourthdec; 

      } else 

      if (fourthnumber.equals("B")) { 

       fourthdec = 3.0; 
       total += fourthdec; 

      } else 

      if (fourthnumber.equals("B-")) { 

       fourthdec = 2.7; 
       total += fourthdec; 

      } else 

      if (fourthnumber.equals("C+")) { 

       fourthdec = 2.4; 
       total += fourthdec; 

      } else 

      if (fourthnumber.equals("C")) { 

       fourthdec = 2.0; 
       total += fourthdec; 

      } else 

      if (fourthnumber.equals("C-")) { 

       fourthdec = 1.7; 
       total += fourthdec; 

      } else 

      if (fourthnumber.equals("F")) { 

       fourthdec = 0; 
       total += fourthdec; 

      } 

      fifthnumber = ream.nextLine(); 

      if (fifthnumber.equals("A+")) { 

       fifthdec = 4.4; 
       total += fifthdec; 

      } else 

      if (fifthnumber.equals("A")) { 

       fifthdec = 4.0; 
       total += fifthdec; 

      } else 

      if (fifthnumber.equals("A-")) { 

       fifthdec = 3.7; 
       total += fifthdec; 

      } else 

      if (fifthnumber.equals("B+")) { 

       fifthdec = 3.4; 
       total += fifthdec; 

      } else 

      if (fifthnumber.equals("B")) { 

       fifthdec = 3.0; 
       total += fifthdec; 

      } else 

      if (fifthnumber.equals("B-")) { 

       fifthdec = 2.7; 
       total += fifthdec; 

      } else 

       if (fifthnumber.equals("C+")) { 

       fifthdec = 2.4; 
        total += fifthdec; 

      } else 

      if (fifthnumber.equals("C")) { 

       fifthdec = 2.0; 
       total += fifthdec; 

      } else 

      if (fifthnumber.equals("C-")) { 

       fifthdec = 1.7; 
       total += fifthdec; 

      } else 

      if (fifthnumber.equals("F")) { 

       fifthdec = 0; 
       total += fifthdec; 

      } 

      sixthnumber = ream.nextLine(); 

      if (sixthnumber.equals("A+")) { 

       sixthdec = 4.4; 
       total += sixthdec; 

      } else 

      if (sixthnumber.equals("A")) { 

       sixthdec = 4.0; 
       total += sixthdec; 

      } else 

      if (sixthnumber.equals("A-")) { 

       sixthdec = 3.7; 
       total += sixthdec; 

      } else 

      if (sixthnumber.equals("B+")) { 

       sixthdec = 3.4; 
       total += sixthdec; 

      } else 

      if (sixthnumber.equals("B")) { 

       sixthdec = 3.0; 
       total += sixthdec; 

      } else 

      if (sixthnumber.equals("B-")) { 

       sixthdec = 2.7; 
       total += sixthdec; 

      } else 

      if (sixthnumber.equals("C+")) { 

       sixthdec = 2.4; 
       total += sixthdec; 

      } else 

      if (sixthnumber.equals("C")) { 

       sixthdec = 2.0; 
       total += sixthdec; 

      } else 

      if (sixthnumber.equals("C-")) { 

       sixthdec = 1.7; 
       total += sixthdec; 

      } else 

      if (sixthnumber.equals("F")) { 

       sixthdec = 0; 
       total += sixthdec; 

      } 

      seventhnumber = ream.nextLine(); 

      if (seventhnumber.equals("A+")) { 

       seventhdec = 4.4; 
       total += seventhdec; 

      } else 

      if (seventhnumber.equals("A")) { 

       seventhdec = 4.0; 
       total += seventhdec; 

      } else 

      if (seventhnumber.equals("A-")) { 

       seventhdec = 3.7; 
       total += seventhdec; 

      } else 

      if (seventhnumber.equals("B+")) { 

       seventhdec = 3.4; 
       total += seventhdec; 

      } else 

      if (seventhnumber.equals("B")) { 

       seventhdec = 3.0; 
       total += seventhdec; 

      } else 

      if (seventhnumber.equals("B-")) { 

       seventhdec = 2.7; 
       total += seventhdec; 

      } else 

      if (seventhnumber.equals("C+")) { 

       seventhdec = 2.4; 
       total += seventhdec; 

      } else 

      if (seventhnumber.equals("C")) { 

       seventhdec = 2.0; 
       total += seventhdec; 

      } else 

      if (seventhnumber.equals("C-")) { 

       seventhdec = 1.7; 
       total += seventhdec; 

      } else 

      if (seventhnumber.equals("F")) { 

       seventhdec = 0; 
       total += seventhdec; 

      } 

      eighthnumber = ream.nextLine(); 

      if (eighthnumber.equals("A+")) { 

       eighthdec = 4.4; 
       total += eighthdec; 

      } else 

      if (eighthnumber.equals("A")) { 

       eighthdec = 4.0; 
       total += eighthdec; 

      } else 

      if (eighthnumber.equals("A-")) { 

       eighthdec = 3.7; 
       total += eighthdec; 

      } else 

      if (eighthnumber.equals("B+")) { 

       eighthdec = 3.4; 
       total += eighthdec; 

      } else 

      if (eighthnumber.equals("B")) { 

       eighthdec = 3.0; 
       total += eighthdec; 

      } else 

      if (eighthnumber.equals("B-")) { 

       eighthdec = 2.7; 
       total += eighthdec; 

      } else 

      if (eighthnumber.equals("C+")) { 

       eighthdec = 2.4; 
       total += eighthdec; 

      } else 

      if (eighthnumber.equals("C")) { 

       eighthdec = 2.0; 
       total += eighthdec; 

      } else 

      if (eighthnumber.equals("C-")) { 

       eighthdec = 1.7; 
       total += eighthdec; 

      } else 

      if (eighthnumber.equals("F")) { 

       eighthdec = 0; 
       total += eighthdec; 

      } 

      JButton b1 = new JButton("Ok"); 
      b1.addActionListener(new ActionListener() 
      { 
       public void actionPerformed(ActionEvent e) 
       { 
        panel.dispose(); 
       } 
      }); 

      JPanel panel1 = new JPanel(new GridLayout(0, 4)); 
      panel1.add(new JLabel("Your GPA is: ")); 
      panel1.add(new JTextField()); 

      double gpa = Double.parseDouble(GPA.getText()); 

      gpa = total/8; 

      JFrame frame = new JFrame(); 
      JOptionPane.showInputDialog(frame, "Your GPA is" + gpa); 


      break; 
     case JOptionPane.CANCEL_OPTION: 

      panel.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

      break; 
     } 


} 

    } 

错误堆栈跟踪是

Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container 
    at java.awt.Container.checkNotAWindow(Container.java:490) 
    at java.awt.Container.addImpl(Container.java:1091) 
    at java.awt.Container.add(Container.java:973) 
    at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:358) 
    at com.apple.laf.AquaOptionPaneUI.createMessageArea(AquaOptionPaneUI.java:92) 
    at javax.swing.plaf.basic.BasicOptionPaneUI.installComponents(BasicOptionPaneUI.java:172) 
    at javax.swing.plaf.basic.BasicOptionPaneUI.installUI(BasicOptionPaneUI.java:141) 
    at javax.swing.JComponent.setUI(JComponent.java:666) 
    at javax.swing.JOptionPane.setUI(JOptionPane.java:1860) 
    at javax.swing.JOptionPane.updateUI(JOptionPane.java:1882) 
    at javax.swing.JOptionPane.<init>(JOptionPane.java:1845) 
    at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:857) 
    at javax.swing.JOptionPane.showConfirmDialog(JOptionPane.java:795) 
    at javax.swing.JOptionPane.showConfirmDialog(JOptionPane.java:757) 
    at Caculator.main(Caculator.java:55) 

如果我点击“在Caculator.main(caculator.java:55) 这使我此行

int result = JOptionPane.showConfirmDialog(null, panel, "Quesion", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 

回答

2

错误消息告诉你到底发生了什么错误和在哪里。

您的panel对象是JFrame这是一个容器。你可以不容器添加到对话框,这是你正在尝试在以下行做:

int result = JOptionPane.showConfirmDialog(null, panel, "Quesion", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 

更改panelJPanel。你需要做更多的校正,如:

  1. 删除这一点,因为dispose()方法不适用于JPanel存在:

    panel.dispose(); 
    
  2. 和删除这一点,因为setDefaultCloseOperation()方法不适用于JPanel存在:

    panel.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    

这是您的GPA计算器的工作副本。

  1. 我已经极大地简化了用于计算GPA点的类合并逻辑,使其成为一个单独的方法。

  2. 我将所有String变量全部更改为JTextField,因为您需要使用文本字段的实例来获取每个字段中输入的文本。


import java.awt.GridLayout; 

import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class Caculator { 
    public static void main(String args[]) { 
     JPanel panel = new JPanel(new GridLayout(8, 2)); 

     JTextField firstnumber = new JTextField(20); 
     JTextField secondnumber = new JTextField(20); 
     JTextField thirdnumber = new JTextField(20); 
     JTextField fourthnumber = new JTextField(20); 
     JTextField fifthnumber = new JTextField(20); 
     JTextField sixthnumber = new JTextField(20); 
     JTextField seventhnumber = new JTextField(20); 
     JTextField eighthnumber = new JTextField(20); 

     panel.add(new JLabel("First Grade")); 
     panel.add(new JLabel("Second Grade")); 
     panel.add(firstnumber); 
     panel.add(secondnumber); 
     panel.add(new JLabel("Third Grade")); 
     panel.add(new JLabel("Fourth Grade")); 
     panel.add(thirdnumber); 
     panel.add(fourthnumber); 
     panel.add(new JLabel("Fifth Grade")); 
     panel.add(new JLabel("Sixth Grade")); 
     panel.add(fifthnumber); 
     panel.add(sixthnumber); 
     panel.add(new JLabel("Seventh Grade")); 
     panel.add(new JLabel("Eighth Grade")); 
     panel.add(seventhnumber); 
     panel.add(eighthnumber); 

     int result = JOptionPane.showConfirmDialog(null, panel, "Quesion", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 

     double total = 0; 
     if (result == JOptionPane.OK_OPTION) { 
      total += getPoints(firstnumber.getText()); 

      total += getPoints(firstnumber.getText()); 

      total += getPoints(thirdnumber.getText()); 

      total += getPoints(fourthnumber.getText()); 

      total += getPoints(fifthnumber.getText()); 

      total += getPoints(sixthnumber.getText()); 

      total += getPoints(seventhnumber.getText()); 

      total += getPoints(eighthnumber.getText()); 

      JTextField GPA = new JTextField(20); 

      JPanel panel1 = new JPanel(new GridLayout(2, 2)); 
      panel1.add(new JLabel("Your GPA is: ")); 
      panel1.add(GPA); 

      double gpa = total/8; 
      GPA.setText(String.valueOf(gpa)); 

      JOptionPane.showMessageDialog(null, panel1); 
     } 
    } 

    static double getPoints(String grade) { 
     double points = 0; 
     if (grade.equals("A+")) { 
      points = 4.4; 
     } else if (grade.equals("A")) { 
      points = 4.0; 
     } else if (grade.equals("A-")) { 
      points = 3.7; 
     } else if (grade.equals("B+")) { 
      points = 3.4; 
     } else if (grade.equals("B")) { 
      points = 3.0; 
     } else if (grade.equals("B-")) { 
      points = 2.7; 
     } else if (grade.equals("C+")) { 
      points = 2.4; 
     } else if (grade.equals("C")) { 
      points = 2.0; 
     } else if (grade.equals("C-")) { 
      points = 1.7; 
     } else if (grade.equals("F")) { 
      points = 0; 
     } 
     return points; 
    } 
} 

希望这有助于。

+0

我编辑我所有的“面板”为“JPanel”也删除panel.dispose();并删除pane.setDefaultCloseOperations等...虽然它仍然给我同样的错误信息。 –

+0

对不起,我不这样做全职。如果您需要更多说明,您可以在此发表意见。 – anacron

+0

当我将代码导出到jar文件中时。我尝试打开它。它说“Java JAR文件”GPA Calculator“无法启动。请检查控制台是否有可能的错误消息。 –