2017-10-11 272 views
-2

在这个问题ItemEvent方法getIten返回对象和日期声明为int数据类型之前,并已正确初始化。 但是当我将类型转换后的对象项目等同于Integer到int日期。对象类抛出类抛出异常

public void itemStateChanged(ItemEvent e) 
{ 
    Object item = e.getItem(); 
    if ((Integer)item==date) System.out.println("ok "); 
    else System.out.println(" not ok"); 
    } 

我得到异常

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 
    at View.Alarm.itemStateChanged(Alarm.java:77) 
    at javax.swing.JComboBox.fireItemStateChanged(Unknown Source) 
    at javax.swing.JComboBox.selectedItemChanged(Unknown Source) 
+2

所以的getItem()返回一个字符串。 – Patrick

+0

它返回一个对象 –

回答

0
java.lang.String cannot be cast to java.lang.Integer 

那是因为你的e.getItem()返回字符串,所以你不能把它转换为整数。尝试做:

if (Integer.parseInt((String)item)==date) System.out.println("ok "); 
+0

getItem方法返回Object不是字符串,但事情是如果我downcast它为int并比较任何int值为什么这个异常是存在,并通过使用if(Integer.parseInt(item.toString())==日期)它正在工作 –

+1

@akhilsinghal字符串是一个对象。您需要查看基础知识。 – Patrick

+0

我不清楚@帕特里克如果我downcast这个返回对象为int,然后与int比较然后为什么有包括字符串的异常只有两个东西使用Integer类和对象类我怀疑这个对象内部使用toString方法 –

0

随着你得到的错误,你会期望getItem()返回一个String,即使getItem返回一个Object。因为字符串是一个对象。

你可能只是使用

if (Integer.valueOf(item.toString())==date) 
    System.out.println("ok "); 
else 
    System.out.println(" not ok");