2014-05-14 92 views
1

我想在combobox中调用课程名称并打印选择了coursename的课程ID我该如何解决这个问题?java.lang.String不能转换为[Ljava.lang.Object;

public void coursename(){ 
    Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 
    Query query= session.createQuery("select a.courseName,a.courseId from Semester e inner join e.course as a"); 
    for (Iterator it = query.iterate(); it.hasNext();) { 
     Object row[] = (Object[]) it.next(); 
     combocourse.addItem(row[0]); 
     }   
     session.close(); 
    } 


    private void combocourseActionPerformed(java.awt.event.ActionEvent evt) {            


    JComboBox combocourse = (JComboBox)evt.getSource(); 
    Object row[] = (Object[])combocourse.getSelectedItem(); 
    System.out.println("id"+row[1]); 

     } 
+0

你能澄清你的问题吗?究竟是什么错误,你在代码的哪一行? – metacubed

+0

字符串不能转换为Object of Array ... @哪行? –

+0

尝试将'getSelectedItem'改为'getSelectedObjects',这会返回所选对象的列表 – user902383

回答

4

如果不设法投下StringObject[]。查看你正在使用的方法的返回值,并使用适当类型的变量来存储这些返回值。 JComboBox#getSelectedItem返回Object(在这种情况下显然是String),而不是数组(任何类型)。但是,在这条线:

Object row[] = (Object[])combocourse.getSelectedItem(); 

...你想投它是一个Object[](的Object阵列),所以你可以将其存储在一个Object[]。你不能那样做。

好像row应该只是ObjectString,不Object[],而当你使用它,你应该只是用它直接,而不是row[1]

Object row = combocourse.getSelectedItem(); 
System.out.println("id"+row); 

或者

String row = (String)combocourse.getSelectedItem(); 
System.out.println("id"+row); 

在你点评:

我在combobox中调用了coursename,但我应该将课程ID保存在我的数据库中。我如何获得courseId?

我不知道JComboBox。基本上,您需要存储包含两个值(ID和名称)的内容,然后在获取所选项目时使用该内容。除非JComboBox具有内置的某些功能,否则您可能需要一个简单的类来保存值,并通过返回courseName来实现toString。隐约的东西,如:

class CourseItem { 
    private String courseName; 
    private String courseId; // Or int or whatever 

    CourseItem(String courseName,String courseId) { 
     this.courseName = courseName; 
     this.courseId = courseId; 
    } 

    public String getCourseName() { 
     return this.courseName; 
    } 

    public String getCourseId() { 
     return this.courseId; 
    } 

    public String toString() { // For display 
     return this.courseName; 
    } 
} 

然后:

public void coursename() { 
    Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 
    Query query = session.createQuery("select a.courseName,a.courseId from Semester e inner join e.course as a"); 
    for (Iterator it = query.iterate(); it.hasNext();) { 
     Object row[] = (Object[]) it.next(); 
     combocourse.addItem(new CourseItem((String)row[0], (String)row[1])); 
    } 
    session.close(); 
} 

private void combocourseActionPerformed(java.awt.event.ActionEvent evt) { 


    JComboBox combocourse = (JComboBox) evt.getSource(); 
    CourseItem item = (CourseItem)combocourse.getSelectedItem(); 
    System.out.println("id" + item.getCourseId()); 

} 
+1

'Object row [] =(Object [])it.next();'too ... :) –

+1

@TAsk:嗯,我不知道那里使用的查询基础结构,所以我知道'it.next()'* does *返回一个数组(可能是迭代行的值的数组)。但是,是的,一般来说,OP应该查看哪些方法返回并使用适当类型的变量来存储这些返回值。 –

+0

谢谢我在combobox中调用了coursename,但是我应该将课程ID保存在我的数据库中。如何获取courseId ? – user3627624

1

尝试:

Object row = (Object)combocourse.getSelectedItem(); 
System.out.println("id"+row); 

只添加单个对象到combocourse,而不是对象的数组。

+0

我怎样才能获得courseId? – user3627624

0

combocourse.getSelectedItem();在您的情况下返回String并且字符串不能转换为对象数组。如果你想获得物品清单,他们使用getSelectedObjects()

相关问题