скриншот несколько раз программа - PullRequest
0 голосов
/ 17 сентября 2018

Я создал небольшую программу, которая должна делать снимок экрана, когда я нажимаю кнопку. Это происходит, однако, как только я щелкаю по нему и делаю снимок экрана, и он сохраняется как «снимок экрана», я не могу щелкнуть по нему и взять другой снимок без перезаписи только что сделанного снимка. Я хочу, чтобы он мог принимать несколько и сохранять их все, не закрывая программу.

Скриншот моего кода, который я сделал с моей программой.

Спасибо!

EDIT:

    package screenshot;

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

    import javax.imageio.ImageIO;

    public class NewJFrame extends javax.swing.JFrame {


public NewJFrame() {
    initComponents();
}

// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jButton1.setIcon(new javax.swing.ImageIcon("C:\\Users\\manwe\\Desktop\\java stuff\\6inch_1.png")); // NOI18N
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jButton1)
    );

    pack();
}// </editor-fold>                        

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     try {
        Robot robot = new Robot();
        String format = "png";
        String fileName = "screenshot." + format;

        Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
        BufferedImage screenFullImage;
        BufferedImage BufferedImage = screenFullImage = robot.createScreenCapture(screenRect);
        ImageIO.write(screenFullImage, format, new File(fileName));


    } catch (AWTException | IOException ex) {

    }
}                                        


public static void main(String args[]) {
    try {
        Robot robot = new Robot();
        String format = "png";
        String fileName = "screenshot." + format;

        Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
        BufferedImage screenFullImage;
        BufferedImage BufferedImage = screenFullImage = robot.createScreenCapture(screenRect);
        ImageIO.write(screenFullImage, format, new File(fileName));


    } catch (AWTException | IOException ex) {

    }



    java.awt.EventQueue.invokeLater(() -> {
        new NewJFrame().setVisible(true);
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
// End of variables declaration                   

}

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Посмотрите на ваш метод jButton1ActionPerformed(...). Вы всегда используете имя файла screenshot.png там. Если вы не хотите всегда использовать одно и то же имя, измените код, чтобы использовать новое уникальное имя при каждом сохранении снимка экрана. Например, добавьте метку времени:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        Robot robot = new Robot();
        String format = "png";
        String fileName = "screenshot-" + System.currentTimeMillis() + "." + format;

        Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
        BufferedImage screenFullImage;
        screenFullImage = robot.createScreenCapture(screenRect);
        ImageIO.write(screenFullImage, format, new File(fileName));


    } catch (AWTException | IOException ex) {

    }
}
0 голосов
/ 17 сентября 2018

Используйте другое имя для файла.Вы используете то же имя, и поэтому оно перезаписывает предыдущий файл.

Вы можете добавить метку времени к имеющемуся имени.Это обеспечит разные имена для изображений.

Вы можете использовать этот код для получения метки времени:

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

ImageIO.write(screenFullImage, format, new File(fileName+timeStamp));
...