Does DataInputStream.close() throw an exception?
Yes, it throws an IOException 
 catch{}  Block
So there is a problem.
The close() method inside the catch{} block
throws an IOException which is not caught.
// Loop with problems
try
{
  while ( true )
    sum += instr.readInt();
}
catch ( EOFException eof )
{
  System.out.println( "The sum is: " + sum );
  instr.close(); <—— throws IOException 
}
catch ( IOException eof ) <—— this  catch is for the try{} block 
{                              not for the previous catch{} block
  System.out.println( "Problem reading input" );
  instr.close(); <—— throws IOException 
}
 
There are various ways to deal with this.
One possibility is not to catch the exception that close()
throws.
Then the method header must be 
public static void main(String[] args) throws IOException
Can a try{}/catch{} be nested inside an outer try{} block?