問題タブ [try-with-resources]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
5240 参照

java - Netbeans での try-with-resources の使用

Java サーブレット クラスに try-catch ステートメントがあります。Netbeans は次のエラーを表示します。

-source 1.6 では try-with-resources はサポートされていません (tr​​y-with-resources を有効にするには -source 7 以降を使用してください)

このエラーを取り除くにはどうすればよいですか?

0 投票する
2 に答える
1347 参照

java - Java 7 で StAX クラスが ARM 用に改良されなかった理由

Java 7にあると思っXMLStreamReaderていましたが、そうではありません。AutoCloseableStAX リーダー/ライター インターフェイスが実装のために改造されなかった (または改造されるべきではない) 技術的な理由はありますAutoCloseableか? それらにはすでに close メソッドがあり、その意図は の close メソッドと変わりませんAutoCloseable

0 投票する
5 に答える
3203 参照

java - このコードがJDBC接続を閉じないのはなぜですか?(Java 7自動クローズ可能な予期しない動作)

java 7u5を使用し、try-with-resources構文を使用すると、次のコードがjdbc接続をリークしているように見えます。

次のコードは、期待どおりに機能します。

最初のケースでは、Connection.close()メソッドが呼び出されていないようです。

最新のmysqlコネクタを使用しています。これは予期しない動作ですよね?

テスト

次のテストは印刷されませんCLOSED

不思議なことに、execute()に変更された場合はreturn 0;印刷CLOSED れます。

javap -p-cTest.class出力

0 投票する
1 に答える
1892 参照

c# - JDK 7 を理解する - リソースで試す

私は .net 開発者です。最近、Java と C# の比較に興味を持ちました。C# の using ブロックに相当する Java の try-with-resources を見つけました。しかし、私はそれを完全には理解できませんでした。C# の using ブロックは言語機能であり、コンパイラはそのコードを生成することを知っています。try-with-resources について理解を深めたいのですが、いくつか質問があります。

  1. C# の using ブロックに似た言語機能ですか?

  2. 以下に相当するJDK 6コードは何ですか:

    /li>
  3. 以下に相当するJDK 6コードは何ですか:

    /li>
  4. C# の Reflector または ILSpy ツールに相当する Java は何ですか? つまり、Java バイト コード クラス ファイルを逆アセンブルし、その Java コードを表示するツールです。

0 投票する
2 に答える
7631 参照

java - 「自己抑制は許可されていません」とは一体何であり、Javacがこのエラーを引き起こすコードを生成するのはなぜですか?

この新しいJava7のtry-with-resourcesコンストラクトは非常に優れています。または少なくとも、例外が発生して私の一日を台無しにするまで良かったです。

私はついにそれをJUnit+jMockだけを使用する再現可能なテストに要約することができました。

この例を実行すると、次のようになります。

ドキュメントを読むと、抑制された例外をそれ自体に追加し直すと、それがこのエラーのトリガーになると言われているようです。しかし、私はそれをしていません。try-with-resourcesブロックを使用しているだけです。次に、Javaコンパイラは、違法と思われるコードを生成します。これにより、機能が事実上使用できなくなります。

もちろん、テストに合格すれば問題はありません。また、テストが失敗すると、例外が発生します。これで、最初に発見した問題を修正したので、try-with-resourcesの使用に戻りました。しかし、次に例外が発生したときは、正当な理由がないように見える1つのJava自体が出力するのではなく、期待の失敗が例外になります。

それで...try-with-resourcesをあきらめることなく、ここで適切なエラー報告を取得する方法はありますか?

0 投票する
1 に答える
218 参照

java-7 - try-with-resources: Java は .close() の呼び出しの順序を保証しますか?

Java 7 で try-with-resources を使用する場合、呼び出される順序に関する保証はあり.close()ますか?

この機能を示す Oracle のサンプル コードを次に示します。

zf.close()との両方writer.close()が呼び出されます。注文は保証されていますか?

0 投票する
8 に答える
35335 参照

java - try-with-resources ブロックでチェーン化された複数のリソースを管理するための正しいイディオムは?

Java 7 のtry-with-resources構文 (ARM ブロック ( Automatic Resource Management ) とも呼ばれます) は、AutoCloseableリソースを 1 つだけ使用する場合に便利で、短くて簡単です。FileWriterただし、相互に依存する複数のリソースを宣言する必要がある場合、たとえば aと aBufferedWriterをラップする場合、どのイディオムが正しいかわかりません。もちろん、この質問は、AutoCloseableこれら 2 つの特定のクラスだけでなく、一部のリソースがラップされている場合にも関係します。

私は次の3つの選択肢を思いつきました:

1)

私が見た単純なイディオムは、ARM 管理の変数で最上位のラッパーのみを宣言することです。

これは素晴らしく短いですが、壊れています。基になるものは変数で宣言されていないため、生成されたブロックFileWriterで直接閉じられることはありません。ラッピングfinallyの 方法 で のみ 閉じます . 問題は、のコンストラクターから例外がスローされた場合、その例外が呼び出されないため、基になるものが閉じられないことです。closeBufferedWriterbwcloseFileWriter

2)

ここでは、基になるリソースとラッピング リソースの両方が ARM 管理の変数で宣言されているため、どちらも確実に閉じられますが、基fw.close() になるリソースは 2 回呼び出されます。つまり、直接だけでなく、ラッピングを通じても呼び出されbw.close()ます。

CloseableのサブタイプであるAutoCloseable両方を実装するこれら 2 つの特定のクラスでは、これは問題にはなりませんclose

このストリームを閉じて、それに関連付けられているシステム リソースを解放します。ストリームが既に閉じられている場合、このメソッドを呼び出しても効果はありません。

ただし、一般的なケースでは、 のみを実装するAutoCloseable(および実装しない) リソースを持つことができます。これは、複数回呼び出すことができることをCloseable保証しません。close

java.io.Closeable の close メソッドとは異なり、この close メソッドはべき等である必要がないことに注意してください。つまり、この close メソッドを複数回呼び出すと、目に見える副作用が生じる可能性があります。これは、複数回呼び出されても効果がないことが必要な Closeable.close とは異なります。ただし、このインターフェイスの実装者は、close メソッドを冪等にすることを強くお勧めします。

3)

fwクリーンアップが必要な実際のリソースを表すのはのみであるため、このバージョンは理論的に正しいはずです。自体はbwリソースを保持せず、 に委譲するfwだけなので、基になる を閉じるだけで十分fwです。

一方、構文は少し不規則であり、Eclipse は警告を発行します。これは誤報だと思いますが、それでも対処しなければならない警告です。

リソース リーク: 'bw' は決して閉じられません


では、どのアプローチを採用すればよいでしょうか。それとも、正しいものである他のイディオムを見逃したことがありますか?

0 投票する
1 に答える
1407 参照

eclipse - エラー:try-with-resourcesは-source1.6ではサポートされていません

LinuxDebian2.6.32-5-amd64を使用しています。私のバージョンのEclipse:4.2.0私のバージョンのJava:jdk1.7.0_07

プロジェクトをビルドすると、エラーが発生します。

コンパイラのコンプライアンスレベルを1.7に設定しています。なにが問題ですか?問題はありましたか?

0 投票する
2 に答える
1401 参照

java - リソースを試してソケットを閉じています

私は次の基本的な形式を持ついくつかの単純なソケットコードを書き込もうとしています-

私の問題は、ソケットが閉じられていることですが、そうあるべきではないと思います。try-with-resourcesはBufferedReaderを作成し、tryブロックを離れると自動的に閉じますが、何らかの理由でソケット全体も閉じます。したがって、後で同じソケットを使用する応答コードに到達すると、例外が発生します。これを修正する方法はありますか?または、リソースを試してみる必要はありませんか(理想的とは言えません)?

0 投票する
2 に答える
11342 参照

java - 「リソースを試す」に問題がある

明確にするために: Eclipseからのメッセージのためにコンパイルすらできません。最初のコードスニペット:inputinputBufferは認識されません。2番目のコードスニペット、Eclipseはスイッチ「コンプライアンスとJREを1.7に切り替える」を要求しています

私はtry-with-resourcesを初めて使用しますが、構文や間違っていることを完全に理解することはできません。これが私のコードです

最後のブロックが機能しないので、試してみたかった

でも

  • また、BufferedReaderをtry (...)...に追加する必要がありますが、どうすればよいですか?

  • また、これには「コンプライアンスとJREを1.7に切り替える」必要があります。それが何を意味し、それが私のプログラムにどのように影響するかは今のところわかりません。誰かがそれが何を意味するのかを説明するか、私が何か間違ったことをしているのかどうかを説明するまで、私はそれをしたくありません。

編集

tryブロックの前に宣言を移動し、nullで初期化しましたが、これは「OK」ですか?