I had done a longer post this morning - not sure where it went.
Have you tried serial.reset()? I would suggest this immediately after the constructor.
You might also try manually calling serial.getBytesReceived() to see if it returns zero, an error, or something else.
Have you tried getting an error message from HALUtil? I'm not familiar with the HAL subsystem, and I was surprised to see it coming from a serial port; I suppose that the USB is somewhere behind the HAL system. The following should return a string that might prove enlightening:
Code:
edu.wpi.first.wpilibj.hal.HALUtil.getHALstrerror()