Java 8 では、SocketException をスローできるという宣言が、java.net.SocketAddress 引数を受け入れる java.net.DatagramPacket コンストラクターから削除されました。
Java 8 より前では、java.net.DatagramPacket コンストラクターは、java.net.SocketException をスローできると宣言しましたが、これらのコンストラクターによって例外がスローされることはありませんでした。
この規則により、以下の例に示すとおり、SocketException またはそのスーパークラス java.io.IOException をキャッチする try ブロックによって囲まれている、SocketAddress 引数が含まれている DatagramPacket コンストラクターにフラグを立てます。
public DatagramPacket getDatagramPacket (SocketAddress socketAddress, byte [] bytes) { DatagramPacket dp = null; try {
dp = new DatagramPacket (bytes, bytes.length, socketAddress);} catch (SocketException e) {
e.printStackTrace();
}
戻り dp;}
以下の DatagramPacket コンストラクターが影響を受けます。
public DatagramPacket(byte[] buf,
int offset,
int length,
SocketAddress address)
public DatagramPacket(byte[] buf,
int length,
SocketAddress address)
try ブロック内の他のコードが SocketException をスローしない場合、Java 8 を使用してコンパイルすると、例外にアクセスできないというエラーが発生します。
このエラーが発生しないようにするには、catch ブロックを削除します。
java.net.DatagramPacket クラスについて詳しくは、
Class java.net.DatagramPacket に関する Java 資料を参照してください。