LWJGL does not support heap ByteBuffers, you must load the file contents into a direct ByteBuffer. IOUtils has methods that help with that afaik.
Even more efficient would be to use a MappedByteBuffer (see FileChannel.map), which avoids a copy. Instead of disk -> memory -> stb_image, you get disk -> stb_image.