This exception is caused because the list of windows that you currently have is not up to date. One of the windows that previously existed no longer exists and you can't switch to it. The first thing to do is to check your code and make sure that you are not closing a window without refreshing the available list of windows using:
driver.getWindowHandles();
The other reason you may get this exception is by trying to switch to a window before calling driver.getWindowHandles(). It's not instantly obvious which window handle relates to which window. The best way to track things is to get the handle of the current window before opening up any new windows, using:
String currentWindowHandle = driver.getWindowHandle();
When you then open a new window and get a list of window handles, you can iterate through the list and ignore the handles for currently...