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

无法将java.lang.String转换为[Ljava.lang.Object;,java,object,combobox,Java,Object,Combobox,我想在组合框中调用课程名称并打印所选课程名称的课程Id如何解决此问题 public void coursename(){ Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Query query= session.createQuery("select a.courseName,a.courseId fro

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

       }

通过不尝试将
字符串
强制转换为
对象[]
。查看正在使用的方法的返回值,并使用适当键入的变量来存储这些返回值。返回
对象
(在本例中,显然是
字符串
),而不是数组(任何类型)。但在这一行中:

Object row[] = (Object[])combocourse.getSelectedItem();
…您正试图将其强制转换为
对象[]
(对象数组
对象[]
),以便可以将其存储在
对象[]
中。您不能这样做

似乎
应该是
对象
字符串
,而不是
对象[]
,并且当您使用它时,您应该直接使用它,而不是像
行[1]

Object row = 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;
    }
}
然后:

尝试:


只向combocourse中添加单个对象,而不是对象数组。

combocourse.getSelectedItem()
在您的情况下,返回
String
并且字符串不能转换为对象数组。如果您想获取对象列表,他们会使用您可以澄清您的问题吗?您到底得到了什么错误以及代码的哪一行?字符串不能转换为对象数组…@哪一行???尝试将
getSelectedItem
更改为
getSelectedObjects
,这将返回所选对象的列表
Object row[]=(Object[])它。next();
也…)@TAsk:嗯,我不知道那里正在使用的查询基础结构,所以据我所知
it。next()
会返回一个数组(可能是正在迭代的行的一个值数组)但是,是的,只是一般来说,OP应该看看什么方法返回,并使用适当类型的变量来存储这些返回值。谢谢我在combobox中调用了coursename,但我应该将课程id保存在数据库中。我如何获得courseId?@user3627624:我对答案做了一些补充。
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());

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