The DatagramChannel.receive method does not specify the behavior when the channel is not bound. Since 1.4, our implementation has returned null, even for the blocking case. Throw NotNotBoundException or explicitly binding the channel's socket might have been better choices but it cannot now be changed.
A related issue is that the adaptor emulation of DatagramSocket.receive is not correct. Legacy DatagramSocket binds the socket if not already bound so the adaptor should be updated to do the same.