Screenshot

Kraftgesetz

Neues Mitglied
Hallo Freunde,

bin relativer Neuling in sachen Programmieren und habe für den Betrieb ein kleines Tool geschrieben das Komponentenabhängigkeiten grafisch darstellen soll...

Dies alles wird in einem Frame gemacht und es besteht die Möglichkeit das dargestellte per JPG abzuspeichern.


In meiner Entwicklungsumgebung funktioniert alles sehr gut, das speichern ist kein Problem...

Wenn ich das Programm allerdings exportiere und als Executable.Jar starte funktioniert das abspeichern als Bild nicht mehr...


Erst hab ich alle absoluten Pfade zu Relativen gemacht, da ich dachte es liegt daran, dem war aber nicht so..


Ich poste hier mal die Methode und hoffe jemand kann mir helfen, ich selbst finde den Fehler leider nicht...


Java:
import org.jgraph.JGraph;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.FileImageOutputStream;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;

public class Paintmethod {
    //wird aufgerufen zum Speichern eines JPG-Files
    public static void male(JScrollPane grafikPanel, JGraph graph, int mouseX, int mouseY, int mouseX2, int mouseY2) {

        File startfile = new File("C:\\");

        FileFilter jpgFilter = new FileNameExtensionFilter("jpg-format", "jpg");
        JFileChooser saver = new JFileChooser();

        saver.addChoosableFileFilter(jpgFilter);
        saver.setCurrentDirectory(startfile);
        String fileName = "";
        int result = saver.showSaveDialog(null);
        if (result == JFileChooser.APPROVE_OPTION) {
            fileName = saver.getSelectedFile().getPath();
        }

        float quality = 1f;
        grafikPanel.setPreferredSize(new Dimension(mouseX2, mouseY2));
        BufferedImage bi = new BufferedImage(grafikPanel.getWidth() + 10000, grafikPanel.getHeight() + 10000, BufferedImage.TYPE_INT_RGB);
        Graphics2D big2d = bi.createGraphics();
        big2d.setColor(Color.WHITE);
        graph.paint(big2d);
        bi = bi.getSubimage(mouseX, mouseY, mouseX2 - mouseX, mouseY2 - mouseY);

        FileNameExtensionFilter filter = (FileNameExtensionFilter) saver.getFileFilter();

        Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName(filter.getExtensions()[0]);
        ImageWriter writer = (ImageWriter) iter.next();
        ImageWriteParam iwp = writer.getDefaultWriteParam();
        iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        iwp.setCompressionQuality(quality);

        if (!saver.getFileFilter().accept(new File(fileName))) {
            fileName += "." + filter.getExtensions()[0];
        }
        FileImageOutputStream fos = null;
        try {
            fos = new FileImageOutputStream(new File(fileName));
            writer.setOutput(fos);
            IIOImage img = new IIOImage((RenderedImage) bi, null, null);
            writer.write(null, img, iwp);
            fos.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                }
            }
        }

        big2d.dispose();

        graph.setSelectionEnabled(true);
    }
}


Vielen Dank schon einmal und Liebe Grüße!
 
Zuletzt bearbeitet von einem Moderator:
Also habe ein wenig rumprobiert...

Wenn ich das über die Konsole starte einfach durch den namen (in diesem Beispiel Graphbuilder.jar)
dann funktioniert es wieder nicht.


Starte ich per Konsole mit dem befehl "java -jar Graphbuilder.jar"
dann klappt es seltsamerweise.

Außerdem tauchte in der Konsole die Meldung "InterruptedException" auf, die jetzt seltsamerweise nicht mehr auftaucht...


wie gesagt, das Bild lässt sich nur speichern wenn man mit "java -jar" startet
 
Also ich rate mal dass die Exception in dem Code fliegt, den er ausführen will. Könnte da das Problem liegen?
PS: Wenn ich dir helfen konnte würde ich mich über ein Danke freuen!
 
Also habe ein wenig rumprobiert...

Wenn ich das über die Konsole starte einfach durch den namen (in diesem Beispiel Graphbuilder.jar)
dann funktioniert es wieder nicht.


Starte ich per Konsole mit dem befehl "java -jar Graphbuilder.jar"
dann klappt es seltsamerweise.

Außerdem tauchte in der Konsole die Meldung "InterruptedException" auf, die jetzt seltsamerweise nicht mehr auftaucht...


wie gesagt, das Bild lässt sich nur speichern wenn man mit "java -jar" startet

Ja, das ist ja auch richtig.
Wenn man eine .class-Datei hat (z.B. Programm.class), dann startet man sie z.B. mit "java Programm".
Wenn man eine .jar-Datei hat (z.B. Programm.jar), dann startet man sie z.B. mit "java -jar Programm.jar".

Aber welche Möglichkeit hattest Du versucht, die NICHT funktionierte?
Wenn ich das über die Konsole starte einfach durch den namen (in diesem Beispiel Graphbuilder.jar)

Hast Du also einfach "Graphbuilder.jar" eingegeben ohne den Java-Interpreter davor zuschreiben?

Grüße
theuserbl
 

Zurück
Oben