問題タブ [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.
java - Java 7 を使用するように NetBeans プロジェクトのプロパティを設定する方法は?
私は NetBeans を初めて使用し、以前は Eclipse を使用していました。さまざまな Java EE の概念を学ぶ必要があるため、NetBeans を使い始めました。また、NetBeans IDE に関連するより関連性の高いチュートリアルを見つけました。EE の抽象的な概念の多くはまだ私を混乱させています。
しかし、私は行き止まりに遭遇しました。Web サービス クライアントのセットアップに関するこのチュートリアルに従っています。ただし、行の 1 つには、java 7 で新しく追加された try-with-resource ステートメントが含まれています。
このチュートリアルを開始したとき、私は Netbeans 7.1.3 と Glassfish 3.1.2 を使用していました。EE7 をサポートしていないことはわかっていたので、NetBeans 8.0.1 と Glassfish 4.1 をダウンロードしました。後で、try-with-resources が SE の一部であることに気付きました。私のアップグレードは、この問題に関して冗長でした。
プロジェクトの設定に何か問題があると思ったので、右クリックしてプロパティを開きました。Libraries オプションの下で、JDK が Java 1.7 (update 51) に正しく設定されていることがわかりました。ここに写真:
その他のオプションも確認したところ、Glassfish 4.1 がサーバーとして選択されていても、Run の下で Java EE が 6 に設定されていることがわかりました。これは EE7 の実装だと思いましたが、オプションは EE6 にロックされています。これは私を少し混乱させますが、問題の原因ではありません。関連する場合に備えて、まだその写真を添付しています。
では、このプロジェクトの Java 設定の何が問題になっているのでしょうか? Java 7 を使用するように設定されているように見えるのに、Java 7 機能を受け入れられないのはなぜですか? Javaバージョン/ホームを設定する必要がある他の場所はありますか?
java - java.lang.AutoCloseable の close メソッドは例外をスローするのに、java.io.Closeable の close メソッドは IOException をスローするのはなぜですか?
私はこのリンクを読んでいましたが、次のように書かれtry-with-resources
ています:
Closeable
インターフェイスの close メソッドは type の例外をスローIOException
し、インターフェイスの close メソッドはtype のAutoCloseable
例外をスローしますException
。
しかし、なぜ?の close メソッドAutoCloseable
もスローされた可能性があるタイプの例外をスローする必要IOException
があるの close メソッドをサポートする例はありますAutoCloseable
Exception
java - java.nio.file.FileSystemException: /proc: 開いているファイルが多すぎます
このコードを使用して、proc ファイルシステム内のすべてのフォルダーを読み取ります
しばらくすると、このエラーが発生します
このループはファイルを閉じずに開いているようです。各サイクルの実行後にファイルを閉じる方法はありますか?
java - Try-with-resources ストリームが予期せず終了しました
ビジネス オブジェクトをファイルに書き込むための次のコード セットがあります。書き込みは通常 2 つの部分で行われますが、writeTrx
ここで -helper は一時ファイルの書き込みと名前変更の両方を行います。
しかし、私は時々これから得ますjava.nio.channels.ClosedChannelException
:
それは私を当惑させます。close が呼び出されたときにのみObjectOutputStream がストリームを閉じるような呼び出し構造でチャネルを閉じるにはどうすればよいですか?
私の理解では、ストリーム内ではなく、内部の writeTrx-call が返されるときに、ストリームをできるだけ早く閉じる必要があります。
java - Try-With-Resources を Catch や Final なしで作成する理由
次の例のように、Try without a Catch または Final と書くのはなぜですか?
java - Try With Resources vs Try-Catch
私はコードを見てきましたが、リソースを試してみました。以前に標準の try-catch ステートメントを使用したことがありますが、同じことをしているように見えます。したがって、私の質問は、Try With Resources と Try-Catch の違いと、どちらが優れているかです。
リソースを試してみてください:
junit - Byteman JUnit Runner - 自動クローズされた InputStream#close で IOException をトリガーできない
私は次のコードを持っています:
私が与える(有効な)入力ストリームが閉じていると思われるときに、Byteman Junit RunnerでIOExceptionをトリガーしようとしています:
私のテストは失敗します: エラーは常に空です。これは明らかに Byteman ルールが実行されていないことを意味します (エージェントによって十分にロードされているため、何が起こっているのかわかりません)。
try-with-resources を介して呼び出された close メソッドで IOException をトリガーするにはどうすればよいですか?
java - 本体とは別に、try-with-resources からのオブジェクト構築中のエラーをキャッチします
概要
私はクローズ可能な型を持っています。CloseableClass
これは、コンストラクター、メソッド、さらには内部で IOError をスローできますclose
。私は try-with-resources を使用し、構築中のエラーを使用中のエラーとは異なる方法で処理したいと考えています (使用にはクリーンアップが含まれます)。さらに良いことに、保守可能なコードを書きたいと思っています。
クローズ可能なクラス インスタンスを構築し、それを try-with-resources ステートメントで使用したいとします。IOException
コンストラクターと、try-with-resources の本体で使用されるメソッドの両方をスローできます。
コンストラクターと本体でスローされたエラーを別々に処理したいとします。それを行うためのサポートされている方法はありますか? Python では、次のようにします。
ただし、Java では、オブジェクトに 2 番目の名前を割り当てないとできません。
これは主に の使用による「保守不可能なコード」であると言われましたがcloseable_
、私はそうは思いません。それをエミュレートするというさらに悪い問題があるため、try-finally の使用は避けたいと思います。
close
これには、テストクラスが従わないノーオペレーションであるために2回目の呼び出しが必要であることに注意してください(AutoCloseable
これは必要ではありませんが、必要ですCloseable
)。close
これは、投げられない場合は少し良くなりますが、それほどではありません。
基本的に問題は、
close
投げることができます- 二
IOException
重印刷を防ぐために対処する前に閉じる"Body error!"
- try-with-resources の複数の初期化子で機能させる方法は明らかではありません
- とにかくコードを複製することになります。
「保守不可能なコード」で生活することを余儀なくされていますか、それともこれに対処するための良い方法を見落としていますか?