public static void display(Throwable error) { ResourceBundle bundle; // 获得所需资源 try { bundle = ResourceBundle.getBundle("Errors"); } catch (MissingResourceException e) { error.printStackTrace(System.err); return; } // 使用错误类名作为资源名称在资源当中查询本地化消息 // 如果没有则不能显示本地化错误 String message = null; Class c = error.getClass(); while((message == null) && (c != Object.class)) { try { message = bundle.getString(c.getName()); } catch (MissingResourceException e) { c = c.getSuperclass(); } } if (message == null) { error.printStackTrace(System.err); return; } String filename = ""; int linenum = 0; try { StringWriter sw = new StringWriter(); PrintWriter out=new PrintWriter(sw); error.printStackTrace(out); String trace = sw.toString(); int pos = trace.indexOf(':'); // 查找第一个冒号 if (error.getMessage() != null) // 如果找到本地化错误消息 pos = trace.indexOf(':', pos 1); // 查找第二个冒号 int pos2 = trace.indexOf(')', pos); // 查找第N 行的尾部 linenum = Integer.parseInt(trace.substring(pos 1,pos2)); // 第N 行 pos2 = trace.lastIndexOf('(', pos); // 回到文件名的首部 filename = trace.substring(pos2 1, pos); // 获得文件名. } catch (Exception e) { ; } // 设置于所得消息一起使用的参数表 String errmsg = error.getMessage(); Object[] args = { ((errmsg!= null)?errmsg:""), error.getClass().getName(), filename, new Integer(linenum), new Date() }; // 显示错误消息 System.out.println(MessageFormat.format(message, args)); } 3.Main()方法用于读取文件,本地化显示错误:
代码如下 | 复制代码 | public static void main(String[] args) { try { FileReader in = new FileReader(args[0]); } catch(Exception e) { LocalizedError.display(e); } } 4.LocalizedError 类引入如下的包:
代码如下 | 复制代码 | import java.text.*; import java.io.*; import java.util.*; |
|
|