首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将java.lang.String强制转换为[Ljava.lang.Object;

不能将java.lang.String强制转换为[Ljava.lang.Object;
EN

Stack Overflow用户
提问于 2014-05-14 18:15:10
回答 3查看 62.1K关注 0票数 5

我想在组合框中调用课程名称并打印所选课程名称的课程Id,如何解决此问题?

代码语言:javascript
复制
    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] ); 

       }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-14 18:18:03

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

代码语言:javascript
复制
Object row[] = (Object[])combocourse.getSelectedItem();

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

看起来row应该只是ObjectString,而不是Object[],而且当你使用它时,你应该直接使用它,而不是作为row[1]

代码语言:javascript
复制
Object row = combocourse.getSelectedItem();  
System.out.println("id"+row ); 

代码语言:javascript
复制
String row = (String)combocourse.getSelectedItem();  
System.out.println("id"+row ); 

在你问的一条评论中:

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

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

代码语言:javascript
复制
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;
    }
}

然后:

代码语言:javascript
复制
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());

}
票数 4
EN

Stack Overflow用户

发布于 2014-05-14 18:18:18

尝试:

代码语言:javascript
复制
Object row = (Object)combocourse.getSelectedItem();  
System.out.println("id"+row ); 

您只能将单个对象添加到组合过程中,而不是对象数组。

票数 1
EN

Stack Overflow用户

发布于 2014-05-14 18:32:51

在本例中,combocourse.getSelectedItem();返回String,而string不能转换为对象数组。如果您想要获取对象列表,它们会使用getSelectedObjects()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23651751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档