Hallo zusammen
Mein Hintergrund Verwalter Programm aus JWindow zwischen den Desktopbild und Dektopverknüpfungen wird manchmal einfach so ohne jeden Grund beendet.
Eine Exception gibts anscheinend auch nicht. Habe die Application Klasse auf folgender Weise schon geändert, um die Exception auszugeben:
Wenns was hilft, hier auch nochmal der Code der View, wobei darin eigentlich auch keine Exception möglich ist:
Ach ja, falls es hilft:
Das Programm wird über ne Jar Datei automatisch vom System (Windows 7 Home Premium) gestartet - Verknüpfung zu dieser Jar befindet sich im Autostart Ordner. Der Fehler der das Programm (also den javaw.exe Prozess) beendet tritt häufig auf, wenn man einen USB anschließt und sich das entsprechende Fenster öffnet, das nach einer Überprüfung fragt. Manchmal aber auch einfach so, ohne das irgendein Programm offen ist noch der Benutzer (also ich) was am PC macht.
Auch wenn ich das Programm per Doppelklick auf die Jar starte wird es manchmal beendet.
Mein Hintergrund Verwalter Programm aus JWindow zwischen den Desktopbild und Dektopverknüpfungen wird manchmal einfach so ohne jeden Grund beendet.
Eine Exception gibts anscheinend auch nicht. Habe die Application Klasse auf folgender Weise schon geändert, um die Exception auszugeben:
Java:
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JWindow;
import javax.swing.Timer;
import com.sun.awt.AWTUtilities;
@SuppressWarnings("serial")
public class Application extends JWindow {
private View view;
private Random random;
private final Timer timer;
private String pathToDirectory;
private int xPosition, yPosition, width, height;
private int interval;
public Application() {
Properties properties = new Properties();
File file = new File("resources/settings.xml");
try {
FileInputStream fis;
fis = new FileInputStream(file);
properties.loadFromXML(fis);
} catch(FileNotFoundException ex) {
ex.printStackTrace();
} catch(InvalidPropertiesFormatException ex) {
ex.printStackTrace();
} catch(IOException ex) {
ex.printStackTrace();
}
pathToDirectory = properties.getProperty("pathToDirectory");
xPosition = Integer.parseInt(properties.getProperty("xPosition"));
yPosition = Integer.parseInt(properties.getProperty("yPosition"));
width = Integer.parseInt(properties.getProperty("width"));
height = Integer.parseInt(properties.getProperty("height"));
interval = Integer.parseInt(properties.getProperty("interval"));
random = new Random();
view = new View(width, height);
setContentPane(view);
pack();
setLocation(xPosition, yPosition);
setFocusable(false);
setVisible(true);
AWTUtilities.setWindowOpaque(this, false);
changeImage();
timer = new Timer((interval*1000), new ActionListener() {
public void actionPerformed(ActionEvent evt) {
changeImage();
}
});
timer.start();
}
/**
* Hier die entscheidente Änderung um eine mögliche Exception auszugeben:
*/
private void changeImage() {
try {
File directory = new File(pathToDirectory);
if(directory!=null && directory.exists() && directory.isDirectory()) {
File[] files = directory.listFiles(new MyFileFilter());
int zufall = random.nextInt(files.length);
Image image = null;
try {
image = ImageIO.read(files[zufall]);
}
catch(IOException ex) {
ex.printStackTrace();
}
view.setImage(image);
}
} catch(Exception ex) {
StackTraceElement[] stacktrace = ex.getStackTrace();
StringBuffer buffer = new StringBuffer();
for(int i=0; i<stacktrace.length; i++) {
buffer.append(stacktrace[i]+"\n");
}
buffer.deleteCharAt(buffer.length()-1);
JOptionPane.showMessageDialog(null, buffer.toString(), ex.toString(), JOptionPane.ERROR_MESSAGE);
}
}
private class MyFileFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
boolean accept = false;
if(name.endsWith(".png") || name.endsWith(".bmp") || name.endsWith(".jpg") || name.endsWith(".gif")) {
accept = true;
}
return accept;
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new Application();
}
});
}
}
Wenns was hilft, hier auch nochmal der Code der View, wobei darin eigentlich auch keine Exception möglich ist:
Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class View extends JPanel {
private Image image;
private int x, y, width, height;
public View(int width, int height) {
x = 0;
y = 0;
this.width = width;
this.height = height;
setPreferredSize(new Dimension(width, height));
setOpaque(false);
setFocusable(false);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
if(image != null) {
g2.drawImage(image, x, y, width, height, this);
}
}
public void setImage(Image image) {
this.image = image;
if(image.getWidth(this) > getWidth()) {
width = getWidth();
x = 0;
} else {
width = image.getWidth(this);
x = ((getWidth()-width)/2);
}
if(image.getHeight(this) > getHeight()) {
height = getHeight();
y = 0;
} else {
height = image.getHeight(this);
y = ((getHeight()-height)/2);
}
repaint();
}
public Image getImage() {
return image;
}
}
Ach ja, falls es hilft:
Das Programm wird über ne Jar Datei automatisch vom System (Windows 7 Home Premium) gestartet - Verknüpfung zu dieser Jar befindet sich im Autostart Ordner. Der Fehler der das Programm (also den javaw.exe Prozess) beendet tritt häufig auf, wenn man einen USB anschließt und sich das entsprechende Fenster öffnet, das nach einer Überprüfung fragt. Manchmal aber auch einfach so, ohne das irgendein Programm offen ist noch der Benutzer (also ich) was am PC macht.
Auch wenn ich das Programm per Doppelklick auf die Jar starte wird es manchmal beendet.