From: Kimmo R. <ki...@us...> - 2013-07-30 17:44:18
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/client/actions In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv9301/src/games/stendhal/client/actions Modified Files: ScreenshotAction.java Log Message: Changed to use SwingWorker Index: ScreenshotAction.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/client/actions/ScreenshotAction.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ScreenshotAction.java 22 Apr 2013 22:22:23 -0000 1.3 --- ScreenshotAction.java 30 Jul 2013 17:44:14 -0000 1.4 *************** *** 21,30 **** import java.awt.image.BufferedImage; import java.io.File; - import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.imageio.ImageIO; ! import javax.swing.SwingUtilities; import org.apache.log4j.Logger; --- 21,30 ---- import java.awt.image.BufferedImage; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; + import java.util.concurrent.ExecutionException; import javax.imageio.ImageIO; ! import javax.swing.SwingWorker; import org.apache.log4j.Logger; *************** *** 47,51 **** public boolean execute(String[] params, String remainder) { ClientSingletonRepository.getUserInterface().addEventLine(new EventLine("", "Taking a screenshot...", NotificationType.CLIENT)); ! // Ming the image needs to be done in EDT. GameScreen screen = GameScreen.get(); int width = screen.getWidth(); --- 47,51 ---- public boolean execute(String[] params, String remainder) { ClientSingletonRepository.getUserInterface().addEventLine(new EventLine("", "Taking a screenshot...", NotificationType.CLIENT)); ! // Drawing the image needs to be done in EDT. GameScreen screen = GameScreen.get(); int width = screen.getWidth(); *************** *** 56,81 **** g.dispose(); // Saving at least can be done outside the EDT. ! new Thread() { @Override ! public void run() { ! String fileName = getFileName(); ! String message; try { ! File file = new File(fileName); ! ImageIO.write(img, "png", file); ! message = "Screenshot was saved to " + fileName; ! } catch (IOException e) { ! message = "Failed to save screenshot to " + fileName; ! Logger.getLogger(ScreenshotAction.class).error(message, e); } ! final String msg = message; ! SwingUtilities.invokeLater(new Runnable() { ! @Override ! public void run() { ! ClientSingletonRepository.getUserInterface().addEventLine(new EventLine("", msg, NotificationType.CLIENT)); ! } ! }); } ! }.start(); return true; --- 56,88 ---- g.dispose(); // Saving at least can be done outside the EDT. ! final String fileName = getFileName(); ! new SwingWorker<String, Void>() { @Override ! protected String doInBackground() throws Exception { ! File file = new File(fileName); ! ImageIO.write(img, "png", file); ! return "Screenshot was saved to " + fileName; ! } ! ! @Override ! public void done() { ! String msg = ""; try { ! msg = get(); ! } catch (InterruptedException e) { ! Logger.getLogger(ScreenshotAction.class).error(e); ! } catch (ExecutionException e) { ! msg = "Failed to save screenshot to " + fileName + " : "; ! Throwable cause = e.getCause(); ! Logger.getLogger(ScreenshotAction.class).error(e); ! if (cause != null) { ! msg = cause.getMessage(); ! } else { ! msg = e.getMessage(); ! } } ! ClientSingletonRepository.getUserInterface().addEventLine(new EventLine("", msg, NotificationType.CLIENT)); } ! }.execute(); return true; |