By
using ErrorDialog class, we can show one (or) more errors to users. If the error
has more information to display, then a 'Details' button is added
automatically. When user clicks on 'Details' button, then it displays the
complete information to user.
ErrorDialog
class provides following constructor to instantiate an object.
ErrorDialog(Shell
parentShell, String dialogTitle, String message, IStatus status, int
displayMask)
Following
table summarizes the parameters.
Parameter
|
Description
|
parentShell
|
the
shell under which to create this dialog
|
dialogTitle
|
the
title to use for this dialog, or null to indicate that the default title
should be used
|
message
|
the
message to show in this dialog, or null to indicate that the error's message
should be shown as the primary message
|
status
|
the
error to show to the user
|
displayMask
|
the
mask to use to filter the displaying of child items, as per IStatus.matches
|
Note
a. ErrorDialog don’t has
any visual representation, unless you call open() method on it.
b. The error dialog will
only be displayed if there is at least one child status matching the mask.
What is IStatus
object?
IStatus
object represents the outcome of an operation. IStatus object carries following
information.
a.
plug-in
identifier (required)
b.
severity
(required)
c.
status
code (required)
d.
message
(required) - localized to current locale
e.
exception
(optional) - for problems stemming from a failure at a lower level
IStatus
class provides following constants to specify the type of message.
Constant
|
Description
|
static
int CANCEL
|
Status
represents a cancelation, bitmask value is 8.
|
static
int ERROR
|
Status
represents an error, bitmask value is 4.
|
static
int INFO
|
Status
represents information, bitmask value is 1.
|
static
int OK
|
Status
represents normal case, bitmask value is 0.
|
static
int WARNING
|
Status
represents warning, bitmask value is 2.
|
Note
Some
status objects, known as multi-statuses, have other status objects as children.
SWT provides MultiStatus class, it implements IStatus interface.
package test; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class Test { private static MultiStatus getMultiStatus(String msg, Throwable t) { List<Status> statuses = new ArrayList<Status>(); StackTraceElement[] stackTraces = t.getStackTrace(); for (StackTraceElement stackTrace : stackTraces) { Status status = new Status(IStatus.ERROR, Test.class.getName(), stackTrace.toString()); statuses.add(status); } MultiStatus ms = new MultiStatus(Test.class.getName(), IStatus.ERROR, statuses.toArray(new Status[] {}), t.toString(), t); return ms; } public static void main(String[] args) { System.out.println(System.getProperty("user.home")); /* Instantiate Display object, it represents SWT session */ Display display = new Display(); /* * Define Shell, it represent a window, You can add more than one shell * to Display */ Shell shell = new Shell(display); /* Open shell window */ shell.open(); try { String s = null; s.toCharArray(); } catch (Exception e) { String message = e.getMessage(); MultiStatus multiStatus = getMultiStatus(message, e); ErrorDialog dialog = new ErrorDialog(Display.getDefault().getActiveShell(), "Demo Error Dialog", "NullPointerException", multiStatus, IStatus.ERROR); dialog.open(); } /* * Run the event dispatching loop until an exit condition occurs, which * is typically when the main shell window is closed by the user. */ while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } /* Dispose the display */ display.dispose(); } }
Run
above application, you can able to see following window.
ErrorDialog
class provides following convenient methods to open an error dialog.
static int
openError(Shell parent, String dialogTitle, String message, IStatus status)
Opens
an error dialog to display the given error.
static int
openError(Shell parentShell, String title, String message, IStatus status, int
displayMask)
Opens
an error dialog to display the given error.
Ex:
String
message = e.getMessage();
MultiStatus
multiStatus = getMultiStatus(message, e);
ErrorDialog.openError(Display.getDefault().getActiveShell(),
"Demo Error Dialog", message, multiStatus);
Following
is the complete working application.
package test; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class Test { private static MultiStatus getMultiStatus(String msg, Throwable t) { List<Status> statuses = new ArrayList<Status>(); StackTraceElement[] stackTraces = t.getStackTrace(); for (StackTraceElement stackTrace : stackTraces) { Status status = new Status(IStatus.ERROR, Test.class.getName(), stackTrace.toString()); statuses.add(status); } MultiStatus ms = new MultiStatus(Test.class.getName(), IStatus.ERROR, statuses.toArray(new Status[] {}), t.toString(), t); return ms; } public static void main(String[] args) { System.out.println(System.getProperty("user.home")); /* Instantiate Display object, it represents SWT session */ Display display = new Display(); /* * Define Shell, it represent a window, You can add more than one shell * to Display */ Shell shell = new Shell(display); /* Open shell window */ shell.open(); try { String s = null; s.toCharArray(); } catch (Exception e) { String message = e.getMessage(); MultiStatus multiStatus = getMultiStatus(message, e); ErrorDialog.openError(Display.getDefault().getActiveShell(), "Demo Error Dialog", message, multiStatus); } /* * Run the event dispatching loop until an exit condition occurs, which * is typically when the main shell window is closed by the user. */ while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } /* Dispose the display */ display.dispose(); } }
No comments:
Post a Comment