JAVA异常的不正确处理方式
最近收到一个求助信息,异常堆栈如下:
```
java.lang.RuntimeException: FF1C1005
at test_ssh.sftp.Pool.get(Pool.java:25) ~[test-ssh-0.0.1-SNAPSHOT.jar:na]
... 116 common frames omitted
Caused by: java.lang.NullPointerException: null
at test_ssh.sftp.Pool.get(Pool.java:23) ~[test-ssh-0.0.1-SNAPSHOT.jar:na]
```
从堆栈信息看就是一个NPE,其他什么也看不出,再看代码(简化的示例代码):
1 package test_ssh.sftp;
2
3 import java.util.concurrent.ConcurrentHashMap;
4 import com.trilead.ssh2.Connection;
5
6 public class Pool {
7 private static ConcurrentHashMap<String, Connection> pool = new ConcurrentHashMap<String, Connection>();
8
9 public synchronized static Connection get(String host, int ftpport) {
10 Connection connection = pool.get(host) == null ? connect(host, ftpport) : pool.get(host);
11 try {
12 connection.ping();
13 } catch (Exception e) {
14 throw new RuntimeException("FF1C1005", e);
15 }
16 return connection;
17
18 }
19
20 private static Connection connect(String host, int ftpport) {
21 Connection connection = new Connection(host, ftpport);
22 try {
23 connection.connect();
24 } catch (Throwable e) {
25 return null;
26 }
27 return connection;
28 }
29 }
代码没有在适当的点抛出异常,把原始异常信息丢了~先修正下代码,该抛的异常抛出来:
public synchronized static Connection get(String host, int ftpport) {
Connection connection = pool.get(host) == null ? connect(host, ftpport) : pool.get(host);
try {
connection.ping();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("FF1C1005", e);
}
return connection;
}
private static Connection connect(String host, int ftpport) {
Connection connection = new Connection(host, ftpport);
try {
connection.connect();
} catch (IOException e) {
throw e;
}
return connection;
}
}
重新打包运行,然后用新开会话运行tail -f 命令追踪日志,准备查看异常信息,然而并未如预期看到异常信息~难道IO被重定向了? 停止服务,在控制终端下重新启动服务,果然日志刷新到标准输出了:
java.io.IOException: There was a problem while connecting to 10.246.186.37:10022
at com.trilead.ssh2.Connection.connect(Connection.java:843)
... 119 more
Caused by: java.io.IOException: Cannot negotiate, proposals do not match.
at com.trilead.ssh2.transport.KexManager.handleMessage(KexManager.java:399)
**Linux会话使用技巧**
服务端程序通常会以守护进程方式启动,不能随意重启,那如果想查看程序输出到stdout(通常不会这么做,但不排除意外)的信息怎么办呢?两个办法:
[1]tail -f /proc/PID/fd/1 这里1是标准输出,当然也可以是2 stderr
[2]sudo strace -p PID -e write
JAVA异常的不正确处理方式的更多相关文章
- Java中断异常 InterruptedException 的正确处理方式
你看到这篇文件可能是因为你已经调用了一个抛出 InterruptedException 异常的方法,并且需要以某种方式处理它. 首先,需要了解为一个方法为啥会 throws InterruptedEx ...
- 在日志中记录Java异常信息的正确姿势
遇到的问题 今天遇到一个线上的BUG,在执行表单提交时失败,但是从程序日志中看不到任何异常信息. 在Review源代码时发现,当catch到异常时只是输出了e.getMessage(),如下所示: l ...
- Java - 异常解析基础
java提高篇(十六)-----异常(一) 一.为什么要使用异常 首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率.虽然我们不是特别喜欢看到它,但是我们不能不承认它的地位 ...
- Java异常的正确使用姿势
最近在项目代码中,遇见异常滥用的情形,会带来什么样的后果呢? 1. 代码可读性变差,业务逻辑难以理解 异常流与业务状态流混在一起,无法从接口协议层面理解业务代码,只能深入到方法(Method)内部才能 ...
- Redis实现分布式锁的正确使用方式(java版本)
Redis实现分布式锁的正确使用方式(java版本) 本文使用第三方开源组件Jedis实现Redis客户端,且只考虑Redis服务端单机部署的场景. 分布式锁一般有三种实现方式: 1. 数据库乐观锁: ...
- “全栈2019”Java异常第七章:try-catch-finally组合方式
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- Java 异常的处理方式--throws和try catch
异常的第一种处理方式throws. 看以下例子: import java.io.*;public class ExceptionTest04{ public static void main(Stri ...
- Java修炼——异常的概念以及处理方式(捕获异常)
异常概念分类 异常( Exception 也称例外)就是在程序的运行过程中 所发生的不正常的事件,它会中断正在运行的程序 所需文件找不到 网络连接不通或中断 算术运算错 (被零除-) ...
- 浅谈java异常[Exception]
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...
- Java 异常讲解(转)
六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWrite ...
随机推荐
- QMainWindow类中比较重要的方法
方法和描述 addToolBar():添加工具栏 centralWidget():返回窗口中心的一个空间,未设置时返回NULL menuBar(): 返回主窗口的菜单栏 setCentralWidge ...
- 优化 Redis 集群缓存分配:解决节点间分配不均导致内存溢出问题
一.Redis 集群部署简介 在现代应用程序中,缓存被广泛应用以提高性能和减轻后端数据库的压力.本文将探讨面对 Redis 集群缓存分配不均问题时的解决方法. 我们的 Redis 集群部署包括 3 主 ...
- [ABC141E] Who Says a Pun?
2023-02-17 题目 题目传送门 翻译 翻译 难度&重要性(1~10):4 题目来源 AtCoder 题目算法 dp,字符串 解题思路 看到求两个完全相同的子串时,我们可以发现其与求最长 ...
- CTFshow misc1-10
小提示:需要从图片上提取flag文字,可以通过截图翻译或者微信发送图片,这两个的ai图像识别挺好用的. misc1: 解压打开就能看见flag,提取出来就行 misc2: 记事本打开,看见 ng字符, ...
- 《Web安全基础》02. 信息收集
@ 目录 1:CDN 绕过 1.1:判断是否有 CDN 服务 1.2:常见绕过方法 1.3:相关资源 2:网站架构 3:WAF 4:APP 及其他资产 5:资产监控 本系列侧重方法论,各工具只是实现目 ...
- 《Kali渗透基础》04. 主动信息收集(一)
@ 目录 1:主动信息收集 2:发现 3:二层发现 3.1:arping 3.2:nmap 3.3:netdiscover 3.4:Scapy 4:三层发现 4.1:ping 4.2:Scapy 4. ...
- github.com/yuin/gopher-lua 踩坑日记
本文主要记录下在日常开发过程中, 使用 github.com/yuin/gopher-lua 过程中需要注意的地方. 后续遇到其他的需要注意的事项再补充. 1.加载LUA_PATH环境变量 在实际开发 ...
- 【爬虫实战】用python爬豆瓣电影《热烈》短评
目录 一.爬虫对象-豆瓣电影短评 二.爬取结果 三.爬虫代码讲解 三.演示视频 四.获取完整源码 一.爬虫对象-豆瓣电影短评 您好!我是@马哥python说,一名10年程序猿. 今天分享一期爬虫案例, ...
- HTML一键打包APK工具 如何进行实名认证购买和激活
HTML一键打包APK工具 价格表 授权时长 价格 1小时 49 1天 99 1个月 199 1个季度 399 半年 599 1年 799 付费版功能 功能点 免费版 付费版 去除广告信息 × √ 去 ...
- 使用Springboot+SpringCloud+Seata1.3.0+Nacos1.2.1进行全局事务管理
一.官方文档网址 http://seata.io/zh-cn/docs/overview/what-is-seata.html Seata1.3.0开发组提供的开发文档 二.常见问题 2.1:网址: ...