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:

Kraftgesetz

Neues Mitglied
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
 

bERt0r

Top Contributor
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!
 

theuserbl

Bekanntes Mitglied
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JavaFX JavaFX Screenshot Machen AWT, Swing, JavaFX & SWT 6
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
F AWT Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen AWT, Swing, JavaFX & SWT 13
A AWT Beim (mehrmaligen) Screenshot machen läuft der Speicher voll AWT, Swing, JavaFX & SWT 2
0 2D-Grafik Screenshot von ScrollBar-Inhalt AWT, Swing, JavaFX & SWT 2
N screenshot machen ohne Robots? AWT, Swing, JavaFX & SWT 9
F Screenshot vom Desktop machen? AWT, Swing, JavaFX & SWT 2
C JList: Eintrag anklicken & JTextfield mit Text aus MySQL füllen? (Screenshot dabei) AWT, Swing, JavaFX & SWT 8
G GUI Screenshot AWT, Swing, JavaFX & SWT 5
T Screenshot ist verschoben. AWT, Swing, JavaFX & SWT 3
D Robot: Screenshot vom Desktop Hintergrund möglich ? AWT, Swing, JavaFX & SWT 3
H Screenshot abhängig von Grafikkarte? AWT, Swing, JavaFX & SWT 15
T Screenshot mit SWT AWT, Swing, JavaFX & SWT 5
A Screenshot eines best. Fensters AWT, Swing, JavaFX & SWT 5
R Screenshot von fremder Anwendung AWT, Swing, JavaFX & SWT 4
H Was ist das für eine Komponente ? (Screenshot) AWT, Swing, JavaFX & SWT 8
A Screenshot einer Anwendung erstellen AWT, Swing, JavaFX & SWT 14
M Bildschirnkoordinaten und Screenshot? AWT, Swing, JavaFX & SWT 2
R JPanel als Screenshot in eine Datei schreiben AWT, Swing, JavaFX & SWT 3
D Zoom problem!!! (brauche screenshot...) plz help thx AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben