我正在尝试将BufferedImage发送到套接字,但它不起作用,但我发现了一种方法来发送它:
// Capture screen
Robot clientrobot = new Robot();
Rectangle robotrectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage image = clientrobot.createScreenCapture(robotrectangle);
ImageIcon imageIcon = new ImageIcon(image);
// Send captured screen to the server
output.writeObject(imageIcon);
output.flush();
但问题是我正在使用javaFX而imageicon是javax.swing这是一个问题所以我需要将它从ImageIcon转换为JavaFX图像所以我找到了一个解决方案,我认为我将其转换为图像:
ImageIcon imageIcon = (ImageIcon) input.readObject();
//java.awt.Image awtimage = imageIcon.getImage();
BufferedImage bi = new BufferedImage(
imageIcon.getIconWidth(),
imageIcon.getIconHeight(),
BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
// paint the Icon to the BufferedImage.
imageIcon.paintIcon(null, g, 0,0);
g.dispose();
Image img = SwingFXUtils.toFXImage(bi, null);
RemoteDesktopFormController.desktopimage = img;
Soo我将转换后的图像发送到其他类公共静态图像img;然后当我尝试使用这个设置图像时:imgviewhere.setImage(desktopimage);它给我带来了3个错误:
错误3让我感到惊讶它说它的null意味着代码没有执行任何东西所以我发送一个空的空图像?我不这么认为可能是转换错误?我不这么认为,因为我从stackoverflow问题抓到了22票,soo有没有人有解决我的问题?如果你需要一个完整的错误日志,那就是:
如果你需要别的东西告诉我,我会发布它。感谢
完整的RemoteDesktopFormController类代码:
package application;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.CheckBox;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
public class RemoteDesktopFormController implements Initializable {
@SuppressWarnings("unused")
private boolean remotecontrolenabled = false;
public static boolean receivingdesktop = false;
public static Image desktopimage;
//private int desktopreceiverate = 50;
@FXML
private ImageView RemoteDekstopFormDesktopImageView;
@FXML
private CheckBox RemoteDekstopFormRemoteControlCheckBox;
public void startreceivingscreen(ActionEvent event){
if (receivingdesktop == false){
try {
MainController.output.writeObject("RECEIVEDESKTOP-configstream");
MainController.output.flush();
} catch (Exception e) {
e.printStackTrace();
}
} else if(receivingdesktop == true){
System.out.println("Already receiving desktop!");
}
}
public void stopreceivingscreen(ActionEvent event){
if (receivingdesktop == true){
try {
MainController.output.writeObject("RECEIVEDESKTOP-configstream");
MainController.output.flush();
receivingdesktop = false;
} catch (Exception e) {
e.printStackTrace();
}
} else if (receivingdesktop == false){
System.out.println("You aren't receiving desktop!");
}
}
public void enableremotecontrol(ActionEvent event){
if (RemoteDekstopFormRemoteControlCheckBox.isSelected() == true){
RemoteDekstopFormDesktopImageView.setImage(desktopimage);
remotecontrolenabled = true;
} else if(RemoteDekstopFormRemoteControlCheckBox.isSelected() == false){
remotecontrolenabled = false;
}
}
// Remote Control Events
public void mouseMoved(MouseEvent event){
}
public void mousePressed(MouseEvent event){
}
public void mouseReleased(MouseEvent event){
}
public void keyPressed(KeyEvent event){
}
public void keyReleased(KeyEvent event){
}
@Override
public void initialize(URL location, ResourceBundle resources) {
}
答案 0 :(得分:0)
NullPointerException发生在RemoteDesktopFormController.java
,第76行:
RemoteDekstopFormDesktopImageView.setImage(desktopimage);
这意味着当执行通过该行时,引用RemoteDekstopFormDesktopImageView
为null
。解决方案:在捕获操作事件之前,您必须确保正确初始化。