无法将java.lang.String转换为[Ljava.lang.Object;
我想在组合框中调用课程名称并打印所选课程名称的课程Id如何解决此问题无法将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
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 );