为什么会出现cannot be cast to java.lang.String
public Xliehua() {
initComponents();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String[] sz=new String[2];
sz[0]=jTextField1.getText();
sz[1]=jTextField2.getText();
FileOutputStream fo = null;
try {
fo = new FileOutputStream("data.ser");
} catch (FileNotFoundException ex) {
Logger.getLogger(Cxhck.class.getName()).log(Level.SEVERE, null, ex);
}
ObjectOutputStream so;
try {
so = new ObjectOutputStream(fo);
so.writeObject(sz);
so.close();
} catch (IOException ex) {
Logger.getLogger(Cxhck.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
String[] zs=new String[2];
JFileChooser ff=new JFileChooser();
ff.showOpenDialog(null);
File fs=ff.getSelectedFile();
try
{
FileInputStream fis = new FileInputStream(fs);
ObjectInputStream is = new ObjectInputStream(fis);
for (int l = 0; l < zs.length; l++) {
zs[l]= (String) is.readObject();
}
jTextField1.setText(zs[0]);
jTextField2.setText(zs[1]);
is.close();
fis.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
} 展开
很明显是类型转换错误。即Integer 类型不能转成String类型。
解决方案:
1.直接使用tosting的方式
String str = entry.value().toString();
2.使用String类的静态方法valueOf()
String str = String.valueOf(entry.value());3. String orderNo = ((String[])request.getAttribute("orderNo"))[0];
4. 将错误中的(String)强制转换类型修改为 object.toString()
扩展资料:
如果使用Kafka的javaApi向kafka发送消息时提示类似的错误:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to
则我们在发送消息时,需要根据自己发送的消息类型来指定序列化类。比如我们发送字符串消息,在构造生产者时增加以下配置:
Properties props = new Properties();props.put("serializer.class", "kafka.serializer.StringEncoder");
这样就可以发送字符串消息了
参考资料:百度百科——Java
把zs[l]= (String) is.readObject();这行代码改为zs= (String[]) is.readObject();即可。
Java的类型转换异常(ClassCastException),是开发中最常见的异常之一,比如把一个本身为String的对象强行转换成List时,就会抛出此异常。当然,一般情况下这种错误很容易就从异常信息中发现原因并纠正,通常对于此类问题我们的想法就是:class文件相同,即字节码相同,那么实例化产生的对象肯定也会相同类型。
问题是说吧不是String类型的实例转成String的异常。
看样子是这行
zs[l]= (String) is.readObject();
你读到的应该是个String数组。你应该这样
zs= (String[]) is.readObject();
然后用zs[1]就取到第一个了。