Tag: exception处理

如何在Java servlet Web应用程序中获取未捕获的exception

是否有一种标准的方法来捕获在诸如tomcat或Jetty之类的java servlet容器内发生的未捕获的exception? 我们运行了很多来自库的servlet,所以我们不能轻易地将我们放在try / catch代码上。 通过提供的API将我们的Web应用程序(在Jetty中运行)中的所有未捕获的exception捕获并记录到我们的错误跟踪器中也是很好的方法。 请不要我只需要记录例外,无论重定向是自定义错误页面的问题都无济于事。 我们通过GWT-RPC完成所有工作,因此用户永远不会看到错误页面。

Java – 应该在何处以及如何使用exception?

我正在阅读有关Java中exception处理的一些内容,以便能够编写更好的代码。 好吧,我承认,我很内疚; 我使用了太多的try-catch {}块,我在catch中使用了ex.printStackTrace() ,甚至没有使用正确的记录器(实际上System.out和System.err被重定向到PrintWriter ,所以a生成了日志)。 然而,经过几个小时的阅读,我发现自己处在一个陌生的地方:未知。 如果exception被设计为传递关于流的exception状态的信息,那么如何知道WHERE是用该信息做某事的适当级别? 例如,当发生数据库错误时,是应该返回空值还是错误代码,还是抛出exception? 如果抛出,那么应该处理该exception? 我明白,如果你不能对它做任何事情,甚至没有用来记录exception。 但是,在GUI应用程序中,这可能会轻易杀死您的GUI(我使用SWT并且我经常看到这一点),即使是menuShown()方法的情况(如果不处理, ArrayIndexOutOfBoundsexception将关闭应用程序) 。 这个例子可以永远持续下去,但这里是问题摘要: 使用try-catch()过度地对性能产生负面影响吗? 使用特定的exception类型更好吗? 如果我错过了可能发生的X类exception之一怎么办? 坦率地说,我听说并且仅用了10%就可以在2 – 3年内考虑Java标准exception。 是的,有人说如果来电者不知道如何处理抛出的exception,他就没有权利调用投掷方法。 是对的吗? 我读过Anders Hejlsberg的这篇文章,说检查过的例外情况很糟糕。 这是否表明在某些情况下建议进行方便的吞咽exception? 一张图片价值1000字; 我想一些例子在这里会有很多帮助。 我知道这个主题是永恒的,但实际上我期待着根据你的建议审查一个150个class级的中型项目。 非常感谢。

为什么String.indexOf不使用exception但在找不到子字符串时返回-1?

为什么String.indexOf不使用exception但在找不到子字符串时返回-1? 这个问题的目的是:当我们开始自定义exception时。 我相信避免需要返回特殊错误代码是正确的设计路径。 你怎么看?

将generics用于exception是否明智?

我的团队正在清理我们对throws Exception的使用,并删除或替换它们以及特定的例外情况。 常见的抛出是因为找不到实体。 我们应该为每个实体类抛出一个通用的NotFoundException还是一个特定的SomeClassNotFoundException ? 如果我们应该抛出一个特定的exception,我们应该为每个实体类型创建一个特定的Exception类吗? 我们可以安全地使用generics吗? 像这样的class NotFoundException extends Exception然后构造函数负责声明我们正在处理的实体类型? 如果我们应该抛出一个特定的exception而不使用generics,那些exception是应该扩展还是实现NotFoundException抽象类或接口?

如何捕获java.lang.NoClassDefFoundError?

我创建了一个应用程序,它接受elf文件(* .a和* .o)并给出方法名称列表,但是如果有人将任何文件重命名为* .a或* .o,那么它将显示: Exception occurred during event dispatching: java.lang.NoClassDefFoundError: org/eclipse/core/resources/IWorkspaceRunnable at org.eclipse.cdt.utils.AR.(AR.java:237) at com.lge.windowELF.ElfBinaryArchive.(ElfBinaryArchive.java:24) at com.lge.windowELF.ELFParserLibraryFile.createBinaryArchive(ELFParserLibraryFile.java:230) at com.lge.windowELF.ELFParserLibraryFile.(ELFParserLibraryFile.java:46) at com.lge.windowELF.ELFWrapper.(ELFWrapper.java:36) at com.lge.windowELF.ELF_UIIntegrated.actionPerformed(ELF_UIIntegrated.java:510) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) 在这种情况下,我想给出一些警告信息。 try / catch没有捕获此exception。

如何映射Java流中的RuntimeExceptions以从无效流元素中“恢复”

想象一下,我正在构建一个库,它将接收一个整数流,并且所有库代码需要做的是返回一个字符串流,其中包含数字的字符串表示。 public Stream convertToString(Stream input) { return input.map(n -> String.valueOf(n)); } 但是,想象某人决定使用以下代码调用我的函数: Stream input = Stream.of(1,2,3) .map(n -> { if (n %3 ) { throw new RuntimeException(“3s are not welcome here!”); } else { return n; } } Stream output = convertToString(input); 由于我希望我的API协议能够处理这种情况并且仍然返回一个字符串流,我想知道如何更改我的代码,以便它检测到流中存在exception并从exception中“恢复”通过将其映射到特殊的”NaN”值。 最后,我希望我的输出流为”1″,”2″,”NaN” 笔记: 我不希望我的API必须为输入定义一个特殊的包装器。 由于依赖性的影响,我不想依赖第三方库。 我不知道流的大小或生成的速度有多大,所以我不能使用任何类型的缓存/预加载所有值。 这可能与Java 8 Streams一起使用吗? 有了Iterator,我想我可以做到: public class SafeIntegerToStringIterator […]

有效地使用UncaughtExceptionHandler

我最近了解了这个Java 1.5function,并开发了一个示例代码来使用它。 我的目标是在线程因未捕获的exception而死亡时重新启动线程。 public class ThreadManager { public static void main(String[] args) throws InterruptedException { startThread(); } public static void startThread(){ FileReaderThread reader = new FileReaderThread(“C:\\Test.txt”); Thread thread = new Thread(reader); thread.setUncaughtExceptionHandler(new CustomExceptionHandler()); thread.start(); } } 这里的文件阅读器只包含一个读取文件和打印内容的例程。 我通过在该类中使文件名为null来模拟未捕获的exception。 然后我的CustomExceptionHandler类如下。 public class CustomExceptionHandler implements Thread.UncaughtExceptionHandler { public void uncaughtException(Thread t, Throwable e) { ThreadManager.startThread(); } } […]

@PostConstruct&Checked例外

在@PostConstruct文档中,它描述了带注释的方法: “该方法绝不能抛出已检查的exception。” 如何处理例如可以在这种方法中抛出的IOException? 只需将它包装在RuntimeException中,让用户担心对象的错误初始状态? 或者@PostConstruct是错误的地方来validation和初始化注入了依赖项的对象?

在java中使用AssertionError和断言

我以标准方式在Java中使用断言,在我的IDE中打开它们。 所以他们不是生产发布的一部分。 最近我一直看到throw new AssertionError()代码示例,我开始考虑应该使用AssertionError而不是断言的情况。 我的猜测主要区别在于断言的可选性,因此它们不会降低生产性能,因此它们可以在代码中经常出现,但修复用户报告的难以再现的错误则更难。 对于AssertionError ,恰恰相反。 我还发现AssertionError在执行不应该得到的代码中更实用,而不是使用assert false //We should not be here 。 特别是如果需要返回值。 例如: int getFoo(AnEnum a){ if (a == AnEnum.ONE) return bar(); else if (a == AnEnum.TWO) return SOME_VALUE; //else assert false; //throw new AssertionError(); return -1; //not necessary when usin AssertionError } 我的推理是否正确? 这两种方法的其他差异/用例/最佳实践/限制是什么? 关于在AssertionError提供描述 – 是应该提供还是仅仅是一个Error (和断言类型)的事实足以或多或少地确定在发现错误的情况下将提供堆栈跟踪?

Spring 3控制器exception处理程序实现问题

我希望实现一个“ExceptionController”来处理在执行我的其他控制器方法时抛出的exception。 我没有在我的应用程序上下文中指定任何HandlerExceptionResolver,因此根据API文档 ,应该启动AnnotationMethodHandlerExceptionResolver。 我在源代码中validation了这一点。 那么为什么以下不起作用呢? @Controller public class ExceptionController { @ExceptionHandler(NullPointerException.class) public ModelAndView handleNullPointerException(NullPointerException ex) { // Do some stuff log.error(logging stuff) return myModelAndView; } } @Controller public class AnotherController { @RequestMapping(value=”/nullpointerpath”) public String throwNullPointer() { throw new NullPointerException(); } } 我在调试日志中看到要求处理exception的三个默认exception处理程序,但没有做任何事情,我看到“DispatcherServlet – 无法完成请求”。 其次是用户显示堆栈跟踪和500内部错误。