Screenshot Programm nach Exception weiterlaufen lassen?

Fabse

Aktives Mitglied
Hi,

ich glaub ich steh gerade ziemlich auf dem Schlauch...ich möchte jede Minute einen Screenshot von meinem Rechner machen und den speichert er in meinen Dropbox Ordner. Das funktioniert auch soweit gut, nur ab und an verweigert die dropbox den Zugriff (keine Ahnung warum) auf jeden Fall möchte ich dann, dass er es in der nächsten Minute wieder versucht. Aktuell ist es so, dass das Programm beendet wird.

Java:
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;


public class screenshot {

	
	public static void main(String[] args) throws IOException, AWTException {
		
		Thread thread = new Thread() {
			
			public void run(){
				
				while(!isInterrupted()) {
					
					Robot alarm = null;
					try {
						alarm = new Robot();
					} catch (AWTException e1) {
						
						e1.printStackTrace();
						System.out.println("Fehler Robot");
					}
					BufferedImage bild = new BufferedImage(1920,1080,1);
					Rectangle rec = new Rectangle(0,0,1920,1080);
					
					bild = alarm.createScreenCapture(rec);
					
					
						try {
							
							ImageIO.write(bild, "JPG", new File("C:\\Users\\Fabian\\Desktop\\Dropbox\\Dropbox\\cmc\\Unbenannt-1.jpg"));
							
						} catch (IOException e) {
							
							
						}
					
					}
					
					
					
					try {
						 sleep(60000); // eine Minute
					}catch(InterruptedException e) {
						interrupt();
						System.out.println("Fehler Thread");
						
					}
					
				}
			
			
		};
		
		thread.start();

	}

}

Diese Exception schmeißt er mir dann:

java.io.FileNotFoundException: C:\Users\Fabian\Desktop\Dropbox\Dropbox\cmc\Unbenannt-1.jpg (Zugriff verweigert)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(Unknown Source)
at javax.imageio.stream.FileImageOutputStream.<init>(Unknown Source)
at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(Unknown Source)
at javax.imageio.ImageIO.createImageOutputStream(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
at screenshot$1.run(screenshot.java:38)
Exception in thread "Thread-0" java.lang.NullPointerException
at javax.imageio.ImageIO.write(Unknown Source)
at screenshot$1.run(screenshot.java:38)

Hatte zuerst versucht in dem catch Block wo versucht wird, das Bild in den dropbox ordner zu speichern einen neuen imageIO.write zu machen, wo er mir das Bild auf den Desktop speichert, aber trotzdem kommt sofort die o.g. Exception mit java.io.FileNotFoundException e9 geht es auch nicht.

Ich glaube ich hab da noch etwas nicht verstanden :rtfm:

Ist es nicht so, dass ich in dem try Block etwas schreiben kann was er machen soll und wenn er das nicht kann, dass er dann das aus dem catch block macht!?

Danke :)
 

Xeonkryptos

Bekanntes Mitglied
Ich lese aus deiner Exception-Meldung auch eine zuvor fliegende NullPointerException, die du auch aufspüren solltest UND du solltest die Signatur der main-Methode überarbeiten. Schmeiß das "throws ..." raus! Das brauchst du nicht, wenn du das catchst.
 

z-mon

Bekanntes Mitglied
Mit "Exceptions" fängst du alles ... aber man sollte immer versuchen die Fehlerquelle so klein wie möglich zu halten.
 

Fabse

Aktives Mitglied
Screenshot ist jetzt groß :)

Java:
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;


public class Screenshot {

	
	public static void main(String[] args) {
		
		Thread thread = new Thread() {
			
			public void run(){
				
				while(!isInterrupted()) {
					
					Robot alarm = null;
					try {
						alarm = new Robot();
					} catch (AWTException e1) {
						
						e1.printStackTrace();
						System.out.println("Fehler Robot");
					}
					BufferedImage bild = new BufferedImage(1920,1080,1);
					Rectangle rec = new Rectangle(0,0,1920,1080);
					
					bild = alarm.createScreenCapture(rec);
					
					
						try {
							
							ImageIO.write(bild, "JPG", new File("C:\\Users\\Fabian\\Desktop\\Dropbox\\Dropbox\\cmc\\Unbenannt-1.jpg"));
							
						} catch (IOException e) {
							
							try {
								ImageIO.write(bild, "JPG", new File("C:\\Users\\Fabian\\Desktop\\exception-1.jpg"));
							} catch (IOException e1) {
								
								e1.printStackTrace();
							}
							
						}
					
					}
					
					
					
					try {
						 sleep(60000); // eine Minute
					}catch(InterruptedException e) {
						interrupt();
						System.out.println("Fehler Thread");
						
					}
					
				}
			
			
		};
		
		
		
		thread.start();

	}

}

Das wäre jetzt die "schlechte" Lösung wenn sie denn funktionieren würde...er versucht zuerst in die Dropbox zu schreiben wenn das nicht geht, dann halt auf den Desktop. Lieber wäre mir wenn er das bild nicht auf dem desktop schreibt, sondern einfach wieder 60 Sekunden wartet und es dann noch einmal versucht.
 

Bile Demon

Bekanntes Mitglied
Das hat ja mit Dropbox nix zu tun. Du schreibst in ein Verzeichnis im lokalen Filesystem, das mittels Dropbox automatisch synchronisiert wird.

Was mir auffällt, ist, dass du immer unter demselben Dateinamen abspeicherst. Klingt für mich so als würde die Dropbox-Anwendung die Datei noch synchronisieren (=hochladen) während du schon wieder drüberspeichern willst.
 

Fabse

Aktives Mitglied
Ja genau ab und zu läuft es durch ohne exception, aber manchmal wird er wohl noch am synchronisieren sein und dann wird der Zugriff verweigert. Dann soll er das einfach überspringen und wieder in sleep gehen, um es dann eine Minute später erneut zu versuchen. Nur wie mach ich das? Extra einen neuen Thread? Gibt's keinen Befehl der den try Block dann auslässt und einfach weiter macht?

Er soll die Datei immer überschreiben!

Danke :)
 
S

SlaterB

Gast
ist try-catch so unverständlich?
wie du doch selber sagst/ mit dem Desktop-Bild feststellst: wenn Exception, dann geht es im catch weiter,
ziemlich einfach oder?

wenn also das Dropbox-Bild nicht geht, dann geht es in Zeile 41 weiter,
bisher speicherst du dann auf dem Desktop,

deine Frage ist nun wie das NICHT mehr passiert? nun die einfachste Sache der Welt: streiche die Codezeilen dafür,
lasse das catch leer, dann passiert auch nichts weiter zur Fehlermeldung, ne Logausgabe kann vielleicht nicht schaden,

jedenfalls geht es danach mit aktuell Zeile 50 weiter,
soviel Effekt hat das catch mindestens, sonst würde die Methode/ der Thread/ das ganze Programm zu Ende sein wie am Anfang

dann übrigens gleich der nächste Schleifendurchlauf,
das sleep(60000) steht erst hinter der Schleife, kommt im Moment nie dran,
wenn du das reinnimmst verschwindet vielleicht auch das Problem


---------

edit:
falls du das nicht gespeicherte Bild nicht verloren geben willst, musst du in der Tat noch mehr arbeiten,
z.B. allein den Block des Speicherns mit einer zweiten Schleife wiederholen bis es klappt,
oder das Bild in einer Variablen außerhalb der Schleife ablegen, beim nächsten Durchlauf keinen neuen Screenshot machen,

mit beidem rettest du vielleicht den ersten, verlierst dann aber womöglich den direkt folgenden Screenshot,
weil ausgelassen bzw. schon viel Zeit vergangen,
wenn du wirklich sicher einen pro Minute haben willst, dann vielleicht wirklich an zwei Threads denken,
einer erzeugt sie, legt sie in einer Liste ab,
ein anderer Thread versucht beharrlich, die Bilder in Reihenfolge abzuspeichern, muss ja nicht auch 60 sec warten, sondern kann öfter versuchen

dabei auf Synchronisation nach Lehrbuch achten,
je nach Kernanzahl/ Ausführung durch Java besteht aber immer noch die Gefahr, dass die Bilder nicht genau alle 60 sec dran kommen, dauern ja selbst sowieso bisschen Zeit, schon ohne zweiten Thread,
eine gewisse Korrektur kann man einbauen, indem man nicht fest 60 sec wartet, sondern bis zu einem Zeitpunkt x, die nächste 00-Minute,
dann das sleep() ausrechnen, es ist gerade 15:40:03? -> 57 sec warten bis 15:41:00
 
Zuletzt bearbeitet von einem Moderator:

Fabse

Aktives Mitglied
Danke Slater B, da hatte ich gestern abend doch echt die Klammern quasi vertauscht...habs jetzt auch gesehen, dass das gar nimmer in der Schleife drinn war. Jetzt müsste es ja super funktionieren :) Nein den Screenshot brauch ich nicht, der aktuelle ist immer am besten und wenn 3 Minuten mal keiner kommt ist das auch nicht so schlimm ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Screenshot höhere Qualität? Spiele- und Multimedia-Programmierung 11
M Einen Hobby Game - / Grafik Designer zu finden (Screenshot vom Spiel) Spiele- und Multimedia-Programmierung 7
F OpenGL Screenshot in iMove (als Greenscreen) => Farben invertiert? Spiele- und Multimedia-Programmierung 16
F Wie mache ich einen Screenshot vom Display (LWJGL)? Spiele- und Multimedia-Programmierung 7
T Screenshot funktion, malt doppelt? Spiele- und Multimedia-Programmierung 2
H Screenshot einer Graphics2D Anwendung erstellen Spiele- und Multimedia-Programmierung 6
aze Java 3D:Screenshot machen.Komische Farben Spiele- und Multimedia-Programmierung 3
G Screenshot aus Java3D heraus Spiele- und Multimedia-Programmierung 2
Leon.tr3x Mein erstes Programm/Spiel Spiele- und Multimedia-Programmierung 10
P Wie kann ich einem Programm hinter eine GUI verstecken? Spiele- und Multimedia-Programmierung 12
P Programm welches auf CMD basirende Programme öffnet (Notepad), sucht , ausführt und compiliert Spiele- und Multimedia-Programmierung 23
A Code in Programm wandeln, wie? Spiele- und Multimedia-Programmierung 3
J Pong Programm Spiele- und Multimedia-Programmierung 1
J Programm "fehlerhaft" als .jar Spiele- und Multimedia-Programmierung 4
P schach programm- wo anfangen? Spiele- und Multimedia-Programmierung 13
J Programm kann Audio Datei nicht finden Spiele- und Multimedia-Programmierung 7
F Klausurersatz: Ein Java-Programm erstellen und dieses präsentieren. Spiele- und Multimedia-Programmierung 2
J programm mit java-plugin Spiele- und Multimedia-Programmierung 2
B Mein Programm reagiert nicht auf den Tasstendruck Spiele- und Multimedia-Programmierung 1
C Mein Programm wird sofort terminated Spiele- und Multimedia-Programmierung 8
A Minecraft Minecraft, Programm funktioniert nur in Eclipse richtig Spiele- und Multimedia-Programmierung 24
P Quiz-Programm Spiele- und Multimedia-Programmierung 4
Q AudioClip hängt Programm auf Spiele- und Multimedia-Programmierung 7
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
C Minecraft Minecraft-Programm: Server anpingen Spiele- und Multimedia-Programmierung 2
J Suche 3D Programm für jMonkeyEngine Spiele- und Multimedia-Programmierung 5
S Kann mir wer verraten wie mann ein java programm Starten? Spiele- und Multimedia-Programmierung 4
U Value in Programm ändern? Spiele- und Multimedia-Programmierung 5
F Programm für Bildbearbeitung gesucht: Skalieren und Speichern Spiele- und Multimedia-Programmierung 6
S Programm hängt sich auf wenn Lied abspielt Spiele- und Multimedia-Programmierung 4
D VOte programm aber wie ?? Spiele- und Multimedia-Programmierung 8
F Programm mit Java3D unter Linux laufen lassen Spiele- und Multimedia-Programmierung 3
S Java 3D Szenegraph programm Spiele- und Multimedia-Programmierung 3
W Programm hängt manchmal Spiele- und Multimedia-Programmierung 5
G AffineTransform macht programm immer langsamer Spiele- und Multimedia-Programmierung 3
M warum funkt dieses Programm nicht? (Menübar, Java 3D) Spiele- und Multimedia-Programmierung 2
G Simples Programm sollte laufen? Spiele- und Multimedia-Programmierung 8
A Programm für ein Backgammon (tavli) Spiel Spiele- und Multimedia-Programmierung 3
LeleEdits Discord JDA nach Rolle suchen Spiele- und Multimedia-Programmierung 0
I Wie kann ich die Kreise nach jeweils 1s spawnen lassen? Processing Spiele- und Multimedia-Programmierung 1
dummycoders Android Studio - Button ändert Farbe erst nach Delay? Spiele- und Multimedia-Programmierung 5
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
Blender3D VLCJ Video lässt sich nicht mehr abspielen nach mysql Installation Spiele- und Multimedia-Programmierung 1
M Kann nur nach rechts drehen Spiele- und Multimedia-Programmierung 7
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
P Spiel laggt nach unbestimmter Zeit tierisch. Spiele- und Multimedia-Programmierung 27
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
A AffineTransform: Nach Drehen verschieben Spiele- und Multimedia-Programmierung 2
N JPanel Inhalt aktualisiert nach Thread.sleep nicht Spiele- und Multimedia-Programmierung 2
T MiniCraft - selbst nach Programmieren Spiele- und Multimedia-Programmierung 25
D Java Variable nach String benennen Spiele- und Multimedia-Programmierung 13
A Minecraft SocketException nach Minecraft-Update Spiele- und Multimedia-Programmierung 6
M DataLine not supported nach 20 Minuten Spiele- und Multimedia-Programmierung 6
M Beim schießen richtet sich die Kugel nach der Maus aus (Quaternion) Spiele- und Multimedia-Programmierung 5
E Spiel startet nach exportieren nicht Spiele- und Multimedia-Programmierung 7
Gossi Quaxlis 2D Tutorial....Probleme nach hinzufügen der Kollisionsabfrage Spiele- und Multimedia-Programmierung 16
aze "verstümmelte Flächen" nach TransparenzInterpolation Spiele- und Multimedia-Programmierung 9
W JOGL bleibt nach display() in PaintArea.paintComponent hängen Spiele- und Multimedia-Programmierung 5
F Lichtspektrum dezimal nach RGB Spiele- und Multimedia-Programmierung 10
R Koordinaten, Breite, Höhe nach drehen berechnen? Spiele- und Multimedia-Programmierung 3
Apo ApoStarz - Bring die Sterne nach Hause Spiele- und Multimedia-Programmierung 19
M Sich nach links verschiebendes Bild Spiele- und Multimedia-Programmierung 2
D Zwei Fragen (Exponential Fog und Schein-nach-außen-Effekt) Spiele- und Multimedia-Programmierung 6
S Polygon bewegt sich nach mehreren aufrufen immer schneller Spiele- und Multimedia-Programmierung 3
M durchsichtiges Bild nach clearRect Spiele- und Multimedia-Programmierung 8
S drawString Befehl nicht ausgeführt nach transforming Spiele- und Multimedia-Programmierung 5
F Das SPiel ruckelt nach einer Zeit Spiele- und Multimedia-Programmierung 19
S Info+Taste nach oben. Spiele- und Multimedia-Programmierung 2
S Punkt berechnen, nach Rotation Spiele- und Multimedia-Programmierung 2
R Falsche Positionierung der Interpolatoren nach Verwendung Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben