java.lang.String 不能转换为 [Ljava.lang.Object;

use*_*624 5 java combobox object

我想在组合框中调用课程名称并打印选择课程名称的课程 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] ); 

       }
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 4

通过不尝试将 a 转换String为 an Object[]。查看您正在使用的方法的返回值,并使用适当类型的变量来存储这些返回值。 JComboBox#getSelectedItem返回一个Object(在本例中显然是一个String),而不是一个数组(任何类型)。但在这一行中:

Object row[] = (Object[])combocourse.getSelectedItem();
Run Code Online (Sandbox Code Playgroud)

...您试图将其转换为Object[](数组Object),以便可以将其存储在Object[]. 你不能那样做。

看起来row应该只是Objector String, not Object[],当你使用它时,你应该直接使用它,而不是row[1]

Object row = combocourse.getSelectedItem();  
System.out.println("id"+row ); 
Run Code Online (Sandbox Code Playgroud)

或者

String row = (String)combocourse.getSelectedItem();  
System.out.println("id"+row ); 
Run Code Online (Sandbox Code Playgroud)

在评论中你问:

我在组合框中调用了课程名称,但我应该将课程 ID 保存在我的数据库中。我怎样才能得到courseId?

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

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());

}
Run Code Online (Sandbox Code Playgroud)