Исключение в потоке «AWT-EventQueue-0» java.lang.NumberFormatException: для входной строки: «Выберите месяц»

#java #swing #jcombobox

#java #качели #jcombobox

Вопрос:

Я пытался разработать приложение для календаря на Java swing. У меня есть 3 JComboBoxes, где вы можете выбрать год, месяц и день, и я продолжаю получать эту ошибку каждый раз, когда пытаюсь выбрать год:

 Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "Select Month"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
    at java.base/java.lang.Integer.parseInt(Integer.java:652)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)
    at calendar.Show$1.itemStateChanged(Show.java:315)
    at java.desktop/javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1227)
    at java.desktop/javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1279)
    at java.desktop/javax.swing.JComboBox.contentsChanged(JComboBox.java:1335)
    at java.desktop/javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:123)
    //......//

 

Я думаю, что проблема заключается в этой части моего кода:

 jcbyear3.addItemListener (new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent arg0) {
                int y = Integer.parseInt(String.valueOf(arg0.getItem())); 
                //String mont= String.valueOf(monthjcb.getSelectedItem());
               
                String monthin = String.valueOf(monthjcb.getSelectedItem());
                String mont = monthin == null || monthin.isEmpty() || monthin.equals("Select Month") ? "January" : monthin;
                    
                    
                //int d=Integer.parseInt(String.valueOf(dayjcb.getSelectedItem()));
                    
                String dayin = String.valueOf(monthjcb.getSelectedItem());
                int d = dayin == null || dayin.isEmpty() || dayin.equals("Select Day") ? 1 :Integer.parseInt(dayin) ;
             
                    
                
                int m=0;
                if(mont.equals("January")) {
                    m=1;
                }
                else if(mont.equals("February")) {
                    m=2;
                }
                //.....//

                String[] h=store.search(y, m, d);
                if(h[0].equals("0"))
                    dayarea.setText("No events found");
                else if(h[0].equals("1")){
                    dayarea.setText(h[1]);
                }
                else if(h[0].equals("2")){
                    dayarea.setText(h[1] "n" h[2]);
                }
                else if(h[0].equals("3")){
                    dayarea.setText(h[1] "n" h[2] "n" h[3]);
                }
                else {
                    dayarea.setText(h[1] "n" h[2] "n" h[3] "n" h[4] "n" h[5]);
                }
                
            }
        });
 

Может кто-нибудь, пожалуйста, помочь мне исправить мою проблему?

Ответ №1:

Эта линия

  String monthin = String.valueOf(monthjcb.getSelectedItem());
 

возвращает тебя "Select Month"

затем в течение дня вы снова просите о том же самом (т.е. monthjcb.getSelectedItem() ):

 String dayin = String.valueOf(monthjcb.getSelectedItem());
 

итак, dayin = "Select Month" и из-за этого вы достигнете в условном:

 int d = dayin == null || dayin.isEmpty() || dayin.equals("Select Day") ? 1 :Integer.parseInt(dayin) ;
 

эта часть Integer.parseInt(dayin)

приводит к java.lang.NumberFormatException: For input string: “Select Month” тому, что вы пытаетесь извлечь целое число из строки, которая не содержит кодированного числового значения.

Основываясь на вашей закомментированной строке, я бы сказал, что вместо:

 String dayin = String.valueOf(monthjcb.getSelectedItem());
 

вы, вероятно, хотите:

 String dayin = String.valueOf(dayjcb.getSelectedItem();
 

Комментарии:

1. Большое вам спасибо 🙂