created an exception handler that creates a report and dispalys it to the user asking them to email it to twentycodes@gmail.com

This commit is contained in:
2011-01-06 17:21:13 +00:00
parent bf6077f0e8
commit 0af0c1007d
5 changed files with 127 additions and 7 deletions

View File

@@ -131,7 +131,8 @@ public class OrderDB {
|| array.get(i).getCustomerName().toLowerCase(Locale.ENGLISH).contains(text.toLowerCase(Locale.ENGLISH))) || array.get(i).getCustomerName().toLowerCase(Locale.ENGLISH).contains(text.toLowerCase(Locale.ENGLISH)))
list.add(array.get(i)); list.add(array.get(i));
mListener.onProgressUpdate(i); if(mListener != null)
mListener.onProgressUpdate(i);
} }
return list; return list;
} }

View File

@@ -38,12 +38,16 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen
public static final boolean DEBUG = true; public static final boolean DEBUG = true;
private JProgressBar mProgressBar; private JProgressBar mProgressBar;
private String mCurrentFile; private String mCurrentFile;
private UncaughtExceptionHandler mExceptionReport = new UncaughtExceptionHandler(this.getClass());
/** /**
* Creates a new MainWindow * Creates a new MainWindow
* @author ricky barrette * @author ricky barrette
*/ */
public MainWindow() { public MainWindow() {
Thread.setDefaultUncaughtExceptionHandler(mExceptionReport);
setTitle("Twenty Codes, LLC Order Database"); setTitle("Twenty Codes, LLC Order Database");
JPanel panel = new JPanel(); JPanel panel = new JPanel();
@@ -89,6 +93,7 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen
if(e.getSource() == mShowAllButton){ if(e.getSource() == mShowAllButton){
new ShowAllDialog(db.toString()); new ShowAllDialog(db.toString());
} }
if (e.getSource() == mSearchButton) { if (e.getSource() == mSearchButton) {
new SearchDialog(); new SearchDialog();
} }
@@ -98,7 +103,7 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen
*/ */
if(e.getSource() == mLoadFileButton){ if(e.getSource() == mLoadFileButton){
try { try {
if(fc.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION) if(fc.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION){
db.setOnProgressListerner(this); db.setOnProgressListerner(this);
mProgressBar.setIndeterminate(true); mProgressBar.setIndeterminate(true);
mCurrentFile = fc.getSelectedFile().toString(); mCurrentFile = fc.getSelectedFile().toString();
@@ -117,6 +122,7 @@ public class MainWindow extends JFrame implements ActionListener, ProgressListen
}); });
pack(); pack();
}
} catch (FileNotFoundException e1) { } catch (FileNotFoundException e1) {
// TODO Auto-generated catch block // TODO Auto-generated catch block

View File

@@ -198,6 +198,9 @@ public class SearchDialog extends JFrame implements ActionListener, ProgressList
*/ */
@Override @Override
public void onProgressUpdate(int progress) { public void onProgressUpdate(int progress) {
if(MainWindow.DEBUG)
System.out.println("search progress = "+ progress);
progress++; progress++;
if(mProgressBar.isIndeterminate()) { if(mProgressBar.isIndeterminate()) {
mProgressBar.setIndeterminate(false); mProgressBar.setIndeterminate(false);

View File

@@ -25,20 +25,41 @@ public class ShowAllDialog extends JFrame implements ActionListener {
/** /**
* Creates a new ShowAllDialog * Creates a new ShowAllDialog
*/ */
public ShowAllDialog(String list){ public ShowAllDialog(final String list){
super(); super();
setTitle("Show All Accounts"); setTitle("Show All Orders");
initialize(list);
}
/**
* Creates a new ShowAllDialog
*/
public ShowAllDialog(String title, String body){
super();
setTitle(title);
initialize(body);
}
/**
* initializes the dialog's components
* @param body
* @author ricky barrette
*/
private void initialize(String body) {
JButton ok = new JButton("Ok"); JButton ok = new JButton("Ok");
ok.addActionListener(this); ok.addActionListener(this);
JScrollPane scrollPane = new JScrollPane(); JScrollPane scrollPane = new JScrollPane();
JTextArea results = new JTextArea(); final JTextArea results = new JTextArea();
scrollPane.setViewportView(results); scrollPane.setViewportView(results);
results.setEditable(false);
results.setText(list); results.setEditable(false);
results.setText(body);
this.getContentPane().add(scrollPane, BorderLayout.CENTER); this.getContentPane().add(scrollPane, BorderLayout.CENTER);
this.getContentPane().add(ok, BorderLayout.SOUTH); this.getContentPane().add(ok, BorderLayout.SOUTH);
pack(); pack();

View File

@@ -0,0 +1,89 @@
/**
* UncaughtExceptionHandler.java
* @date Jan 6, 2011
* @author ricky barrette
* @author Twenty Codes, LLC
*/
package com.TwentyCodes.java.OrderProcessor.UI;
/**
* An exception handler used to help report bugs in our applications
* @author ricky barrette
*/
public class UncaughtExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
private java.lang.Thread.UncaughtExceptionHandler mDefaultUEH;
@SuppressWarnings("rawtypes")
private Class mApp;
/**
* Creates a new UncaughtExceptionHandler
* @param c
* @author ricky barrette
*/
@SuppressWarnings("rawtypes")
public UncaughtExceptionHandler(Class c) {
mApp = c;
mDefaultUEH = Thread.getDefaultUncaughtExceptionHandler();
}
/**
* (non-Javadoc)
* @see java.lang.Thread.UncaughtExceptionHandler#uncaughtException(java.lang.Thread, java.lang.Throwable)
* @author ricky barrette
*/
@Override
public void uncaughtException(Thread t, Throwable e) {
new ShowAllDialog("We're Sorry....", getDebugReport(e));
mDefaultUEH.uncaughtException(t,e);
}
/**
* generates a human readable report about the exception
* @param e
* @return
* @author ricky barrette
*/
private String getDebugReport(Throwable e) {
StackTraceElement[] theStackTrace = e.getStackTrace();
StringBuffer report = new StringBuffer();
report.append("We're sorry, but there was an error with your application.\n" +
" Please email this report to twentycodes@gmail.com to help make this application better. \n\n");
report.append("--------- Application ---------\n\n");
report.append(mApp.getName());
report.append(" generated the following exception:\n\n");
report.append(e.toString() + "\n\n");
report.append("-------------------------------\n\n");
report.append("--------- Stack trace ---------\n\n");
for (int i = 0; i < theStackTrace.length; i++) {
report.append(" " + theStackTrace[i].toString() + "\n");
}
report.append("-------------------------------\n\n");
// If the exception was thrown in a background thread inside
// AsyncTask, then the actual exception can be found with getCause
report.append("--------- Cause ---------------\n\n");
Throwable cause = e.getCause();
if (cause != null) {
report.append(cause.toString() + "\n\n");
theStackTrace = cause.getStackTrace();
for (int i = 0; i < theStackTrace.length; i++) {
report.append(" " + theStackTrace[i].toString() + "\n");
}
}
report.append("-------------------------------\n\n");
return report.toString();
}
}