मैंने एक छोटा प्रोग्राम बनाया है जो बटन पर क्लिक करने पर स्क्रीनशॉट लेने के लिए है। हालांकि, एक बार जब मैं इसे क्लिक करता हूं और स्क्रीनशॉट लेता हूं और यह "स्क्रीनशॉट" के रूप में सहेजता है, तो मैं इसे क्लिक नहीं कर सकता और जो मैंने अभी लिया था उसे ओवरराइट किए बिना दूसरा ले सकता था। मैं चाहता हूं कि यह प्रोग्राम को बंद किए बिना कई लेने और उन सभी को सहेजने में सक्षम हो।

मेरे कोड का स्क्रीनशॉट जो मैंने अपने प्रोग्राम के साथ लिया था।

धन्यवाद!

संपादित करें:

    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                   

}

0
user179809 17 सितंबर 2018, 17:08

2 जवाब

सबसे बढ़िया उत्तर

फ़ाइल के लिए किसी अन्य नाम का उपयोग करें। आप एक ही नाम का उपयोग करते हैं, और यही कारण है कि यह पिछली फ़ाइल को अधिलेखित कर देता है।

आप अपने नाम के लिए टाइमस्टैम्प जोड़ सकते हैं। यह छवियों के लिए अलग-अलग नाम सुनिश्चित करेगा।

टाइमस्टैम्प प्राप्त करने के लिए आप इस कोड का उपयोग कर सकते हैं:

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

ImageIO.write(screenFullImage, format, new File(fileName+timeStamp));
3
Kristjan Kica 19 अक्टूबर 2018, 21:14

अपनी विधि 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) {

    }
}
2
zlakad 17 सितंबर 2018, 19:15