Index: test/testIO.rb =================================================================== --- test/testIO.rb (revision 3824) +++ test/testIO.rb (working copy) @@ -7,6 +7,7 @@ @file3 = "Test3IO_tmp" test_exception(ArgumentError) { IO.new } +test_exception(StandardError) { IO.new(123) } test_exception(TypeError) { IO.new "FROGGER" } test_exception(TypeError) { IO.foreach 3 } Index: src/org/jruby/RubyIO.java =================================================================== --- src/org/jruby/RubyIO.java (revision 3824) +++ src/org/jruby/RubyIO.java (working copy) @@ -40,6 +40,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.lang.ref.WeakReference; +import java.lang.ref.Reference; import java.nio.channels.Channel; import java.nio.channels.Pipe; import java.nio.channels.SelectableChannel; @@ -163,7 +164,11 @@ } public IOHandler getIOHandlerByFileno(int aFileno) { - return (IOHandler) ((WeakReference) getRuntime().getIoHandlers().get(new Integer(aFileno))).get(); + Reference reference = ((Reference) getRuntime().getIoHandlers().get(new Integer(aFileno))); + if (reference == null) { + return null; + } + return (IOHandler) reference.get(); } // FIXME can't use static; would interfere with other runtimes in the same JVM