java.lang.String无法转换为[Ljava.lang.Object;

5
我想在组合框中调用课程名称,并打印所选课程名称的课程ID。我该如何解决这个问题?
    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] ); 

       }

你能澄清一下你的问题吗?你在哪一行代码上遇到了什么错误?请具体说明。 - metacubed
字符串无法转换为对象数组...在哪一行? - earthmover
尝试将getSelectedItem更改为getSelectedObjects,这将返回所选对象列表。 - user902383
3个回答

4

不要试图将String转换为Object[]。查看您正在使用的方法的返回值,并使用适当类型的变量存储这些返回值。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 ); 

在您的评论中,您问道:

我在组合框中调用了课程名称,但是我应该在我的数据库中保存课程ID。我该如何获取课程ID?

我不知道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(); 太棒了... :) - akash
1
@任务: 嗯,我不知道那里使用的查询基础设施,所以我认为 it.next() 可能 返回一个数组(也许是正在迭代的行的值的数组)。但是总的来说,题主应该查看方法返回什么并使用适当类型的变量来存储这些返回值。 - T.J. Crowder
谢谢,我在组合框中调用了课程名称,但是我应该在我的数据库中保存课程ID。我该如何获取课程ID? - user3627624
@user3627624:我已经在回答中添加了一点内容。 - T.J. Crowder

1
尝试:
Object row = (Object)combocourse.getSelectedItem();  
System.out.println("id"+row ); 

你只能将单个对象添加到组合课程中,而不能添加对象数组。

1
在你的情况下,combocourse.getSelectedItem(); 返回 String,而字符串无法转换为对象数组。如果你想获得对象列表,可以使用 getSelectedObjects()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接