我正在创建一种信使程序,客户端与服务器等通信。 我偶然发现的问题是在尝试创建ObjectInputStream和ObjectOutputStream时。以下是实例化对象流的方法:
.navbar-transparent
此方法中的问题是没有调用System.out.println()方法,即使至少据我所知,应该调用每个流的一个。例如,在实例化ObjectInputStream时,它应该抛出一个Exception(它显然不会因为System.out.println()没有被调用),返回null(由于系统似乎也不是这样) .out.println()没有被调用)或成功创建ObjectInputStream对象,因为System.out.println()没有被调用。为什么它不会遇到任何这些情况?我错过了可能发生的另一种情况吗?
P.S。是的,正在从程序中调用initializeStreams()方法,我刚检查它将System.out.println()放在方法的第一行。
谢谢
答案 0 :(得分:0)
尝试在finally-cluster中的控制台上写一些东西。 可能的是抛出异常,但不会被捕获。
但是你会看到......不会是你。
我的第一个提示:调试你的程序,这经常帮助我。
但你也可以试试这个:
private void initializeStreams() {
input = null;
output = null;
try {
input = new ObjectInputStream(socket.getInputStream());
}
} catch (IOException ioe) {
System.out.println("Could not initialize ObjectInputStream: " + ioe.getMessage());
}
//just copied the if outside of the try-catch-cluster
if (input != null) {
System.out.println("ObjectInputStream successfully initiated");
} else {
System.out.println("ObjectInputStream is null but did not return an exception when being instantiated");
try {
output = new ObjectOutputStream(socket.getOutputStream());
} catch (IOException ioe) {
System.out.println("Could not initialize ObjectOutputStream: " + ioe.getMessage());
}
if (output != null) {
System.out.println("ObjectOutputStream successfully initiated");
} else {
System.out.println("ObjectOutputStream is null but did not return an exception when being instantiated");
}
}`
有一件事我会尝试找出问题的原因或地点。 即使它没有那么大意义;)
答案 1 :(得分:0)
嗯,你只抓住IOException
。例如,代码中可能有RuntimeException
。在这种情况下,你不会进入你的捕获区。
将IOException
更改为Exception
,您会看到原因。
答案 2 :(得分:0)
new ObjectInputStream()
可以抛出IOException以外的异常,但是try-catch只捕获IOException。如果抛出的异常是其他类型之一会发生什么?
答案 3 :(得分:0)
将IOException
替换为所有异常类的父类Exception
。无论异常是什么,它肯定会被catch块中的Exception
类捕获。
所以在代码中的任何地方用catch (IOException ioe)
替换catch (Exception ioe)
。然后你可以找到异常的来源。