Error handling
Using bracket to avoid leaking resources in the case of an exception, using GLFW.setErrorHandler to capture and rethrow a more useful error message, and throwing exceptions instead of just printing error messages to stdout without informing the rest of the program that something went wrong.