apps/toys/Hello/src/main/java/hello/dialog/dialogs/ExceptionDialog.java

Print this page




  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package hello.dialog.dialogs;
  26 
  27 import java.io.PrintWriter;
  28 import java.io.StringWriter;
  29 
  30 import javafx.scene.control.skin.AccordionSkin;
  31 import javafx.scene.Node;
  32 import javafx.scene.control.ButtonType;
  33 import javafx.scene.control.Dialog;
  34 import javafx.scene.control.DialogPane;
  35 import javafx.scene.control.Label;
  36 import javafx.scene.control.TextArea;
  37 import javafx.scene.image.Image;
  38 import javafx.scene.image.ImageView;
  39 import javafx.scene.layout.GridPane;
  40 import javafx.scene.layout.Priority;
  41 
  42 public class ExceptionDialog extends Dialog<ButtonType> {
  43     
  44     public ExceptionDialog(Throwable exception) {
  45         final DialogPane dialogPane = getDialogPane();
  46         
  47         setTitle("Exception Details");
  48         dialogPane.setGraphic(new ImageView(new Image(AccordionSkin.class.getResource("modena/dialog-error.png").toExternalForm())));
  49         dialogPane.getButtonTypes().addAll(ButtonType.OK);
  50         dialogPane.setContentText(exception == null? "":  exception.getMessage());
  51         dialogPane.setExpandableContent(buildExceptionDetails(exception));
  52     }
  53 
  54     private Node buildExceptionDetails( final Throwable exception) {
  55         Label label = new Label("The exception stacktrace was:");
  56 
  57         StringWriter sw = new StringWriter();
  58         PrintWriter pw = new PrintWriter(sw);
  59         exception.printStackTrace(pw);
  60         pw.close();
  61 
  62         TextArea textArea = new TextArea(sw.toString());
  63         textArea.setEditable(false);
  64         textArea.setWrapText(true);
  65 
  66         textArea.setMaxWidth(Double.MAX_VALUE);
  67         textArea.setMaxHeight(Double.MAX_VALUE);
  68         GridPane.setVgrow(textArea, Priority.ALWAYS);


  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package hello.dialog.dialogs;
  26 
  27 import java.io.PrintWriter;
  28 import java.io.StringWriter;
  29 

  30 import javafx.scene.Node;
  31 import javafx.scene.control.ButtonType;
  32 import javafx.scene.control.Dialog;
  33 import javafx.scene.control.DialogPane;
  34 import javafx.scene.control.Label;
  35 import javafx.scene.control.TextArea;
  36 import javafx.scene.image.Image;
  37 import javafx.scene.image.ImageView;
  38 import javafx.scene.layout.GridPane;
  39 import javafx.scene.layout.Priority;
  40 
  41 public class ExceptionDialog extends Dialog<ButtonType> {
  42     
  43     public ExceptionDialog(Throwable exception) {
  44         final DialogPane dialogPane = getDialogPane();
  45         
  46         setTitle("Exception Details");
  47         dialogPane.setGraphic(new ImageView(new Image(getClass().getResource("/hello/dialog/dialog-error.png").toExternalForm())));
  48         dialogPane.getButtonTypes().addAll(ButtonType.OK);
  49         dialogPane.setContentText(exception == null? "":  exception.getMessage());
  50         dialogPane.setExpandableContent(buildExceptionDetails(exception));
  51     }
  52 
  53     private Node buildExceptionDetails( final Throwable exception) {
  54         Label label = new Label("The exception stacktrace was:");
  55 
  56         StringWriter sw = new StringWriter();
  57         PrintWriter pw = new PrintWriter(sw);
  58         exception.printStackTrace(pw);
  59         pw.close();
  60 
  61         TextArea textArea = new TextArea(sw.toString());
  62         textArea.setEditable(false);
  63         textArea.setWrapText(true);
  64 
  65         textArea.setMaxWidth(Double.MAX_VALUE);
  66         textArea.setMaxHeight(Double.MAX_VALUE);
  67         GridPane.setVgrow(textArea, Priority.ALWAYS);