我无法在输出流中编写imageicon。这是我的代码。请任何人帮助我。
public ScreenSpyer(Socket socket, Robot robot, Rectangle rect) {
this.socket = socket;
this.robot = robot;
this.rectangle = rect;
start();
}
public void run(){
oos = null;
try{
oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(rectangle);
// oos.flush();
// oos.reset();
}catch(IOException ex){
ex.printStackTrace();
}
while(continueLoop){
//Capture screen
image = robot.createScreenCapture(rectangle);
imageIcon = new ImageIcon(image);
//Send captured screen to the server
try {
System.out.println("before sending image");
System.out.println("intermidiate");
// oos.reset();
oos.writeObject(imageIcon);
System.out.println("New screenshot sent");
//oos.reset();
//oos.flush();
oos.reset();
} catch (IOException ex) {
ex.printStackTrace();
}
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
你说“它被卡住了”;你怎么知道的?这显然是一个线程,由其他代码终止。我假设跟踪输出“发送新屏幕截图”没有执行;可能是因为它被卡住了,或者writeObject()可能会抛出你没有捕获的异常。
在IOException之后捕获throwable以查看是否存在另一个异常。
生成图像后,将其替换为已知图像并查看是否已写入图像;这将有助于弄清楚这个特定的writeObject()调用是否存在问题,或者程序中其他地方出现了什么问题。
尝试使用屏幕上的小矩形,而不是全部。也许getScreenSize()返回一些不可用的东西,比像屏幕大一个像素大小的东西。如果一个小矩形有效,请尝试在两个维度上将矩形缩小几个像素。
答案 1 :(得分:0)
看起来您实际上是在尝试将屏幕截图图像保存到OutputStream
或者可能是磁盘。
在这种情况下,您不必使用ImageIcon
。您可以保存从createScreenCapture
调用返回的图像。您可以使用ImageIO
保存图片:
ImageIO.write(BufferedImage image, String formatName, File output);
或
ImageIO.write(BufferedImage image, String formatName, ImageOutputStream output);
或
ImageIO.write(BufferedImage image, String formatName, OutputStream output);
formatName
可以是jpg,png或gif。