Je suis nouveau sur StackOverflow et Java, donc je m'excuse si ce n'est pas au bon endroit et si ma compréhension des concepts Java est désactivée. J'ai regardé autour en ligne, mais n'ai pas trouvé une solution à mon problème, et je ne comprends pas pourquoi ceci se produit.Java: Enregistrer une image dans un répertoire de fichiers sans quitter l'application
Je fais une application qui prend une capture d'écran de mon écran et l'enregistre dans le répertoire source du projet. Après avoir enregistré l'image, une autre fenêtre s'ouvre et affiche cette image.
Mon problème est la sauvegarde de l'image. Je peux l'enregistrer, mais la capture d'écran n'apparaît dans le répertoire du projet qu'après avoir fermé tout le programme, provoquant une erreur car l'image ne peut pas être lue une première fois car l'image n'existe pas dans le répertoire c'est être sauvé. Après la fermeture, l'image apparaît dans le répertoire et le programme s'exécute comme il se doit sans erreur après l'avoir exécuté une seconde fois.
Je ne comprends pas pourquoi cela se produit. Comment se fait-il que l'image n'apparaisse dans le répertoire du fichier qu'après la fin du programme et comment pourrais-je résoudre ce problème? J'utilise JavaFx avec FXML dans Inteliji Idea.
Toute aide serait très appréciée.
// This method/function runs on a simple button press.
public void screenshot() throws Exception{
// Hides the window
boarderPane.getScene().getWindow().hide();
String format = "jpg";
String fileName = "FullScreenshot." + format;
try {
// This gives the window enough time to hide so it doesn't get caught in the screenshot
Thread.sleep(500);
Robot robot = new Robot();
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage screenFullImage = robot.createScreenCapture(screenRect);
ImageIO.write(screenFullImage, format, new File("src\\image\\" + fileName));
System.out.println("A full screenshot saved!");
} catch (AWTException ex) {
System.err.println(ex);
}
// Creates a new window that will display the screenshot
Stage imageStage = new Stage();
Parent newWindow = FXMLLoader.load(getClass().getResource("screenshotWindow.fxml"));
imageStage.setTitle("Caliber --- Current Screen Shot Window");
imageStage.setScene(new Scene(newWindow, 800, 800));
imageStage.show();
// Saves the screenshot location so it can be used in the other window
MasterVariables.image = new Image("image\\" +
Génial. Merci beaucoup. Je l'ai maintenant travailler à cause de vous. –
Génial. Heureux d'avoir aidé. Vous devriez accepter la réponse, alors. Pour me remercier, mais aussi pour répondre à cette question. –