package org.sinrel.engine.exception; import java.awt.Dimension; import java.awt.Font; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class FatalError { /** * @param e - Исключение */ public static void showErrorWindow( Exception e ) { if( e != null ) showErrorWindow( e.getClass(), e.getStackTrace(), e.getMessage() ); } /** * @param cl * класс исключения * @param trace * трассировка стека * @param message * сообщение исключения */ private static void showErrorWindow( Class<?> cl, StackTraceElement[] trace, String message ) { try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() ); } catch ( ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e ) {} JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); BufferedImage img; try { img = ImageIO.read(FatalError.class.getResource("sinrel.png")); } catch (IOException e1) { img = null; } ImageIcon logo = new ImageIcon(img); JLabel l = new JLabel(); l.setIcon(logo); panel.add(l); JLabel info = new JLabel("Критическая ошибка привела к завершению работы."); info.setFont(info.getFont().deriveFont(12F)); panel.add(info); JLabel info2 = new JLabel("Обратитесь к разработчику, прилагая текст ниже:"); info2.setFont(info.getFont()); panel.add(info2); JTextArea tp = new JTextArea(); tp.setEnabled(true); tp.setEditable(false); tp.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12)); tp.setText(cl.getName() + ": " + message + "\n"); tp.setBounds(10, 45 + info.getHeight() + img.getHeight(), 370, 160); for (StackTraceElement st : trace) { tp.setText(tp.getText() + " " + "at " + st.toString() + "\n"); } tp.setText( tp.getText().trim() ); JScrollPane sp = new JScrollPane(tp); panel.add(sp); JLabel aboutLabel = new JLabel("Информация о компьютере:"); aboutLabel.setFont(aboutLabel.getFont().deriveFont(12F)); panel.add(aboutLabel); JTextArea about = new JTextArea(); about.setEnabled(true); about.setEditable(false); about.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12)); about.setText(""); String[] keys = { "java.version", "java.vm.version", "java.io.tmpdir", "os.name", "os.arch", "os.version", "user.name", "user.home" }; for (String s : keys) { about.setText(about.getText() + " " + s + ": " + System.getProperty(s) + "\n"); } String s = about.getText(); s = s.substring( 0, s.length()-1 ); about.setText( s ); JScrollPane scroll = new JScrollPane(about); panel.add(scroll); // Make JOptionPane JOptionPane opane = new JOptionPane(panel); opane.setPreferredSize(new Dimension(500, 400)); opane.setComponentOrientation( JOptionPane.getRootFrame().getComponentOrientation() ); JDialog dialog = opane.createDialog("SLE Fatal Error"); dialog.setIconImage( img.getSubimage( 1, 4, 52, 52) ); dialog.setVisible(true); dialog.dispose(); } }