在看版本代码的时候,发现有如下的代码,我们在平时的编码中可能也会遇到,很容易造成句柄没有关闭的问题:
finally
{
try
{
if (null != in)
{
in.close();
}
if (null != out)
{
out.close();
}
if (null != out)
{
socket.close();
}
}
catch (Throwable t1)
{
throw new TransException(t1);
}
}
1.在finally中关闭句柄时,一定要对各个句柄的关闭单独进行try操作,而不能对所有的关闭操作只进行一次try操作
2.不要在finally中随便进行抛异常操作,捕获到异常应该打印日志
finally
{
try
{
if (null != in)
{
in.close();
}
}
catch(Throwable t1)
{
System.out.println(t1.toString());
}
try
{
if (null != out)
{
out.close();
}
}
catch(Throwable t1)
{
System.out.println(t1.toString());
}
try
{
if (null != out)
{
socket.close();
}
}
catch(Throwable t1)
{
System.out.println(t1.toString());
}
}
分享到:
相关推荐
在IT领域,句柄操作是程序中非常关键的一部分,尤其在使用编程语言如易语言进行系统级编程时。"句柄"是操作系统为程序提供的一种间接访问对象的机制,它是一个唯一的标识符,用于识别和操作系统中的各种资源,如窗口...
try-finally语句是Microsoft对C和C++语言的扩展,它能使32位的目标程序在异常出现时,有效保证一些资源能够被及时清除,这些资源的清除任务可以包括例如内存的释放,文件的关闭,文件句柄的释放等等。try-finally...
在Delphi编程环境中,有时我们需要对操作系统中的进程进行管理,比如关闭某个进程。"EndProcess"函数就是这样一个用于结束进程的实用程序。本篇将详细解释如何在Delphi中使用`EndProcess`来关闭一个进程,以及涉及的...
例如,如果一个类负责管理一个文件句柄,则应该在析构函数中关闭该文件,即使在异常情况下也是如此。 ##### 3. 抛出一个异常的行为 抛出异常是一种强大的机制,用于在程序中报告错误。理解何时以及如何抛出异常...
在DELPHI编程环境中,有时候我们需要实现一个功能,即程序能够自动关闭自身的进程。这个功能在某些特定场景下非常有用,比如程序运行完毕后自动退出,或者在出现错误时进行安全的自我关闭。本文将详细讲解如何在...
7. **错误处理**:在实际编程中,应考虑到可能的错误情况,如API调用失败,窗口句柄无效等,通过`try...except...finally`结构进行异常处理。 通过理解和运用这些知识点,我们可以编写出一个能够根据用户需求关闭...
- **特点**:无论try块中的代码是否引发异常,finally块总是会被执行。主要用于清理资源,如关闭文件流、释放内存等。 - **示例**: ```delphi try // 可能引发异常的代码 finally // 清理工作,如关闭文件流 ...
标题中的“关闭外部程序”指的是一个使用Delphi编程语言开发的小型应用程序,它的主要功能是能够终止或关闭运行在用户计算机上的其他外部程序。Delphi是一种基于Object Pascal的集成开发环境(IDE),常用于创建...
在Delphi编程环境中,有时我们需要在程序执行过程中关闭其他正在运行的外部程序,这在诸如软件更新、系统维护等场景中十分常见。本示例主要讲解如何利用Delphi的API函数来实现这一功能。 首先,我们需要理解Delphi...
这里的基本用例是清理-我想在AJAX请求中隐藏“正在加载”微调器,或者我想关闭已打开的任何文件句柄,或者我想记录一个操作是否完成,而不管它是否成功或不。为什么不.then(f, f) ? promise.finally(func)与...
本文将深入探讨如何在Delphi编程环境中使用DLL(动态链接库)模式创建一个可浮动的摄像头窗体,以便灵活地打开和关闭摄像头功能。 Delphi是一款强大的Object Pascal集成开发环境,它提供了丰富的库支持和直观的可视...
首先尝试使用 `OpenProcess` 打开进程,如果成功则调用 `TerminateProcess` 结束进程,并确保在结束后关闭句柄。如果过程中发生错误,它会抛出一个异常。 在实际应用中,你需要先通过某种方式获取到目标进程的ID,...
在Delphi中,可以使用`CreateFile`函数获取设备句柄,然后针对每个句柄进行相应的操作。 具体到代码实现,以下是一个简单的概念示例: ```delphi uses Windows, SysUtils; const IOCTL_STORAGE_EJECT_MEDIA = $...
在Delphi中,你可以创建一个`THandle`类型的变量来保存`CreateFile`返回的句柄,这个句柄代表了与设备的连接。 打开光驱通常使用`IOCTL_STORAGE_EJECT_MEDIA`控制代码,而关闭或弹出光驱则使用`IOCTL_STORAGE_MEDIA...
为了确保外部资源一定要被关闭,通常关闭代码被写入 finally 代码块中,当然我们还必须注意到关闭资源时可能抛出的异常。这种方式虽然可以确保资源的关闭,但代码却变得复杂、冗长。 try-with-resource 语法 JDK7 ...
通常,这类代码会包含上述步骤的实现,如查找占用文件的进程,关闭文件句柄,以及最终删除文件的逻辑。 综上所述,通过掌握Delphi中的进程、线程、句柄管理和文件操作技术,我们可以构建一个类似于360粉碎文件的...
这段代码在尝试打开和读取文件时,如果发生错误,会捕获并打印异常信息,然后在finally块中确保文件被关闭,即使在出现异常的情况下也是如此。 此外,"OpenExe"这个名字可能暗示这是一个可执行文件,用于在操作系统...
另一方面,对于非托管资源(如操作系统句柄或内存),如果你在构造函数中分配了这些资源,那么你需要确保在析构函数中释放它们。由于构造失败不会执行析构函数,你应该在构造函数中使用`try/finally`块来处理这种...
这对于确保清理资源或执行必要的操作非常有用,例如关闭文件句柄、停止加载动画等。 对于逻辑错误,通常需要通过测试和代码审查的方式来逐步缩小问题所在,直到找到问题的源头并进行修复。 在实际应用中,你可以...
在这个例子中,如果文件打开后没有在finally块中关闭,即使出现异常,文件句柄也不会被释放,造成资源泄露。 **(2)异常路径资源泄露**:在异常处理路径中忘记释放资源。 **(3)私有域资源泄露**:资源被存储在...