I've never seen the overflow event in practice. Its meant to inform you that you will need to reprocess whatever directory you're watching. You don't need to exit the program, just crawl the directory using a single threaded File.list() call. I've cut-n-pasted how I handle it below. This code...
1) Logs an issue
2) Sets a flag to trigger a directory reprocess that crawls all the files in a directory
3) Skips the rest of the processing of this WatchEvent
// log overflow events and trigger reprocess later.
if (kind == OVERFLOW)
{
logger.warn("File listener recieved an overflow event. You should probably check into this");
overflowTriggeredFlag = true;
continue;
}