【发布时间】:2020-05-29 05:58:36
【问题描述】:
今天,我在编写服务器/客户端应用程序时遇到了Scanner 对象的问题。我已经解决了问题,但我不明白为什么我的解决方案解决了问题。
起初,在我的应用程序中,我在编译项目时遇到了一些内存泄漏警告(JAVA 8,eclipse)
因为我使用Scanner 向用户询问输入但没有关闭它。当我尝试关闭扫描仪时,我的其他类会抛出 java.util.NoSuchElementException 之类的异常。我了解到我有类似的问题:Cannot use multiple Scanner objects in Java 但在课程之间。当我在一个类中关闭一个扫描器时,另一个类(线程)扫描器无法执行。 (java.util.NoSuchElementException)
我发现解决这个问题的解决方案是将 Scanner 函数作为类函数成员:
public class ClientThread extends Thread {
private Scanner scanner;
/*some code*/
}
这样做时,我失去了内存泄漏警告。
为什么让扫描仪作为班级成员解决了警告?是因为类析构函数吗?
【问题讨论】:
-
你原来的范围是什么?不清楚
-
我认为我的问题与变量的范围无关。我会试着换个说法。我不明白如何将扫描仪作为函数中的局部变量会导致内存泄漏而不关闭但扫描仪没有类成员变量。
标签: java multithreading oop java.util.scanner