Я успешно делал это раньше, но теперь после многократного запуска программы сбой происходит на скриншоте слишком быстро.И оно не будет принимать правильное изображение, оно принимает его, поскольку jframe исчезает. Как мне это исправить? ![Error](https://i.stack.imgur.com/AxWF3.png)
Редактировать: Так что в основномЯ пытаюсь запечатлеть изображение Jpanels внутри JFrame, но в процессе этого, вызывая его из макроса Excel, полученное изображение оказывается выше, чем нужное мне изображение.
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class TimeTableGraphicsRunner extends JFrame
{
public TimeTableGraphicsRunner()
{
getContentPane().setLayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS));
}
public void load(TimeTablePanel pan)
{
pan.setTitle(x.getTitle(TimeTable.titleCount));
getContentPane().add(pan);
}
public void run()throws Exception
{
System.out.println("Creating image in panel");
//setSize(TimeTable.width,TimeTable.height);
getContentPane().setPreferredSize(new java.awt.Dimension(TimeTable.width,TimeTable.height));
pack();
setVisible(true);
System.out.println("Image is in panel");
grabScreenShot();
System.out.println("Cleaning up");
setVisible(false);
System.out.println("Finished");
System.exit(0);
}
private void grabScreenShot() throws Exception
{
BufferedImage image = (BufferedImage)createImage(getContentPane().getSize().width,getContentPane().getSize().height);
getContentPane().paint(image.getGraphics());
try{
ImageIO.write(image, "png", new File("C:\\Users\\"+TimeTable.user+"\\AppData\\TimeLineMacroProgram\\TimeLine.png"));
System.out.println("Image was created");
}
catch (IOException e){
System.out.println("Had trouble writing the image.");
throw e;
}
}
}