リソースリーク:'sc'がクローズされない
2022-02-14 04:07:12
ショッピング管理システムを再度書き込むと、「'sc' is never closed, 'sc' is never closed」という警告が表示されました。
メソッドの末尾に sc.close() を追加すると、エラーが報告されます。
到達不能なコード
具体的なプログラムはこのようになります。
<スパン
@Override
public void addToCar() {
showAllGood();//show all goods
Scanner sc = new Scanner(System.in);
System.out.println("Please enter the serial number of the product");
int id = sc.nextInt();
int num ;
boolean flag = true;//while's loop condition, reassigned within the loop
while(true) {
System.out.println("Please enter the number of purchases ");
num = sc.nextInt();
if(goods.get(id).getCount()-num<0) //shopping out of stock
System.out.println("Sorry, shopping is out of stock, please reduce the number of purchases! The quantity needs to be less than "+goods.get(id).getCount());
else {
flag = false;
goods.get(id).setCount(goods.get(id).getCount()-num);
Goods newgood = new Goods(goods.get(id).getName(),goods.get(id).getPrice(),num);
p.addCar(newgood);
}
}
//sc.close();
}
アラートによると、scは決して閉じないということで、私のscはwhileループの中で値を取るので
そして、私のwhileループの条件をよく見てみると、while(true)-deadループであることがわかります。すべてのscオブジェクトは常に使用中であり、クローズすることはできません。
そして、while(true) を while(flag) に変更すると、警告は消え、 sc.close(); は正しく閉じます。
手順を修正しました。
@Override
public void addToCar() {
showAllGood();//show all goods
Scanner sc = new Scanner(System.in);
System.out.println("Please enter the serial number of the product");
int id = sc.nextInt();
int num ;
boolean flag = true;//while's loop condition, reassigned within the loop
while(true) {
System.out.println("Please enter the number of purchases ");
num = sc.nextInt();
if(goods.get(id).getCount()-num<0) //shopping out of stock
System.out.println("Sorry, shopping is out of stock, please reduce the number of purchases! The quantity needs to be less than "+goods.get(id).getCount());
else {
flag = false;
goods.get(id).setCount(goods.get(id).getCount()-num);
Goods newgood = new Goods(goods.get(id).getName(),goods.get(id).getPrice(),num);
p.addCar(newgood);
}
}
sc.close();
}
関連
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
Spring Boot による HTTPS アクセスの設定
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
JQuery DataTable 详解
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
Javaドッキングリーダの落とし穴について終了コード -1073740940 (0xC0000374)でプロセス終了
-
Easyui Resource が Document と解釈され、MIME タイプが application/json で転送された場合について。
-
スプリングセキュリティ CSRF対策
-
Spring MVC アノテーションエラーです。引数型[java.lang.String]の名前が利用できません。
-
比較方式がその一般契約に違反している。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
final, finally, finalizeの違いについて話してください。
-
javaの模造品QQ WeChatのチャットルーム
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
自動配線された依存性のインジェクションに失敗しました。
-
javaでよく使われる英単語
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
IDEA パッケージステートメントの欠落
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
javaException: 比較メソッドが一般契約に違反しています!