Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JLabel图像来自字节[]_Java_Swing - Fatal编程技术网

Java JLabel图像来自字节[]

Java JLabel图像来自字节[],java,swing,Java,Swing,我在oracle数据库中存储了一个图像作为字节[] 这很有效 然后,我必须取出图像并将其设置为Jlabel上的图像图标 但最后的代码似乎不起作用。字节[].lenght的长度与导入DB.No e.stacktrace中的图像的长度完全相同 打印。标签不会更改。我该怎么办?基本上,您是在将原始“像素”数据写入数据库,这不是很有帮助,虽然我确信可能需要将这些数据重新组合成可能有用的内容,但这只是大量的工作,可以更轻松地完成 因此,首先,使用ByteArrayOutputStream将图像写入 Byt

我在oracle数据库中存储了一个图像作为字节[]

这很有效

然后,我必须取出图像并将其设置为Jlabel上的图像图标

但最后的代码似乎不起作用。字节[].lenght的长度与导入DB.No e.stacktrace中的图像的长度完全相同
打印。标签不会更改。我该怎么办?

基本上,您是在将原始“像素”数据写入数据库,这不是很有帮助,虽然我确信可能需要将这些数据重新组合成可能有用的内容,但这只是大量的工作,可以更轻松地完成

因此,首先,使用
ByteArrayOutputStream
将图像写入

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "png", baos);

byte[] bytes = baos.toByteArray()
activeUserShop.setImage(bytes);
System.out.println("Image uploaded! Lenght: "+bytes+"bytes");
EntityTransaction tx = em.getTransaction();
System.out.println(activeUserShop.toString());
tx.begin();
manager.updateUser(activeUserShop);
tx.commit();
然后简单地使用
ByteArrayInputStream
再次读取图像

byte[] imageObtained=manager.findByUserName(u).getImage();
ByteArrayInputStream bais = new ByteArrayInputStream(imageObtained);
BufferedImage img = ImageIO.read(bais);

我应该指出,由于数组和
Integer.MAX\u值
的限制,这只适用于“相对”小的图像,除非您可以直接写入
OutputStream
并直接从
InputStream
读取,否则您将不得不接受这一限制。这可能不是问题,但您应该意识到;)

你试过基本的调试吗?查看您获取的字节[]是否实际具有正确的图像,查看标签是否正在更新。使用ImageIO.write将图像数据写入ByteArrayOutputStream,为此,您可以获取字节[],并将其发送到实体。要读取它时,请将字节[]包装在ByteArrayInputStream中,并使用ImageIO.read读取字节[]ImageGovered=manager.findByUserName(u.getImage();System.out.println(获得的图像长度);它得到了正确的图像。标签是更新的,因为它有默认的图像。基本上,你是在将“像素”原始数据写入数据库,当你在大学里应该以可读的格式(如png或jpg)写入实际图像时,他们让我们学习各种错误的东西。这就是为什么我经常在这里问你。谢谢。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "png", baos);

byte[] bytes = baos.toByteArray()
activeUserShop.setImage(bytes);
System.out.println("Image uploaded! Lenght: "+bytes+"bytes");
EntityTransaction tx = em.getTransaction();
System.out.println(activeUserShop.toString());
tx.begin();
manager.updateUser(activeUserShop);
tx.commit();
byte[] imageObtained=manager.findByUserName(u).getImage();
ByteArrayInputStream bais = new ByteArrayInputStream(imageObtained);
BufferedImage img = ImageIO.read(bais);