Add exception dialog
This commit is contained in:
parent
78a3299d4b
commit
012dcdd950
@ -0,0 +1,65 @@
|
|||||||
|
/* SPDX-License-Identifier: MIT */
|
||||||
|
package atlantafx.sampler;
|
||||||
|
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
|
import javafx.scene.control.Alert.AlertType;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.TextArea;
|
||||||
|
import javafx.scene.layout.VBox;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static java.lang.Double.MAX_VALUE;
|
||||||
|
|
||||||
|
public class DefaultExceptionHandler implements Thread.UncaughtExceptionHandler {
|
||||||
|
|
||||||
|
private final Stage stage;
|
||||||
|
|
||||||
|
public DefaultExceptionHandler(Stage stage) {
|
||||||
|
this.stage = stage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void uncaughtException(Thread t, Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
var dialog = createExceptionDialog(e);
|
||||||
|
if (dialog != null) { dialog.showAndWait(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private Alert createExceptionDialog(Throwable throwable) {
|
||||||
|
Objects.requireNonNull(throwable);
|
||||||
|
|
||||||
|
var alert = new Alert(AlertType.ERROR);
|
||||||
|
alert.setTitle("Error");
|
||||||
|
alert.setHeaderText(null);
|
||||||
|
alert.setContentText(throwable.getMessage());
|
||||||
|
|
||||||
|
try (var sw = new StringWriter(); var printWriter = new PrintWriter(sw)) {
|
||||||
|
throwable.printStackTrace(printWriter);
|
||||||
|
|
||||||
|
var label = new Label("Full stacktrace:");
|
||||||
|
|
||||||
|
var textArea = new TextArea(sw.toString());
|
||||||
|
textArea.setEditable(false);
|
||||||
|
textArea.setWrapText(false);
|
||||||
|
textArea.setMaxWidth(MAX_VALUE);
|
||||||
|
textArea.setMaxHeight(MAX_VALUE);
|
||||||
|
|
||||||
|
var content = new VBox(5, label, textArea);
|
||||||
|
content.setMaxWidth(MAX_VALUE);
|
||||||
|
|
||||||
|
alert.getDialogPane().setExpandableContent(content);
|
||||||
|
alert.initOwner(stage);
|
||||||
|
|
||||||
|
return alert;
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -40,21 +40,13 @@ public class Launcher extends Application {
|
|||||||
new KeyCodeCombination(KeyCode.F, KeyCombination.CONTROL_DOWN)
|
new KeyCodeCombination(KeyCode.F, KeyCombination.CONTROL_DOWN)
|
||||||
);
|
);
|
||||||
|
|
||||||
private static class DefaultExceptionHandler implements Thread.UncaughtExceptionHandler {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void uncaughtException(Thread t, Throwable e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
launch(args);
|
launch(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage stage) {
|
public void start(Stage stage) {
|
||||||
Thread.currentThread().setUncaughtExceptionHandler(new DefaultExceptionHandler());
|
Thread.currentThread().setUncaughtExceptionHandler(new DefaultExceptionHandler(stage));
|
||||||
loadApplicationProperties();
|
loadApplicationProperties();
|
||||||
|
|
||||||
if (IS_DEV_MODE) {
|
if (IS_DEV_MODE) {
|
||||||
|
@ -117,7 +117,7 @@ public class DialogPage extends AbstractPage {
|
|||||||
var button = new Button("Click", new FontIcon(Feather.MEH));
|
var button = new Button("Click", new FontIcon(Feather.MEH));
|
||||||
button.setOnAction(e -> {
|
button.setOnAction(e -> {
|
||||||
var alert = new Alert(AlertType.ERROR);
|
var alert = new Alert(AlertType.ERROR);
|
||||||
alert.setTitle("Error Dialog");
|
alert.setTitle("Exception Dialog");
|
||||||
alert.setHeaderText(randomHeader());
|
alert.setHeaderText(randomHeader());
|
||||||
alert.setContentText(FAKER.lorem().paragraph(3));
|
alert.setContentText(FAKER.lorem().paragraph(3));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user