This is probably due to the file in /tmp used to communicate with the process having different permissions than the one the jstack gets. The file in question is /tmp/hsperfdata_$USER/$PID.
Don’t know why it works with -F as the man page just says “Force a stack dump when ‘jstack [-l] pid’ does not respond.”