There is no simple way to tell if a method call will result in a stack overflow.
While you can determine the number of slots a method requires on the stack, this doesn't tell you anything about the number of bytes actually needed.
Java byte code works with an abstraction of the actual stack, where the stack is treated as if were composed of abstract "slots". The this-reference, method parameters and local variables all occupy either one or two slots on the stack (long and double need two slots, everthing else counts as one slot). Thats the information you can obtain from a class file.
What's still missing is how slots actually are translated to stack memory, and also, what the JIT actually creates from the byte code. The JIT might as well decide to add temporary variables when it performs optimizations (such as code invariant movement).
Also when you call a native method, there is no way of telling how much stack memory the call will take.
You see, much depends on the current JRE, VM and platform. Combine this with the lack of a simple build-in method to actually determine how large the actual stack is, this makes it impractical to determine how much stack in needed and how much is available.