Hola, el código genera un error si se introducen dos cadenas como "ave" y "avecesar" porque estás tratando de extraer índices que no existen en una cadena, en concreto aquí:
recorridoCadena1=cadena1.substring(i,i+1);
recorridoCadena2=cadena2.substring(i,i+1);
Estás tratando de extraer un índice, el mismo índice para las dos cadenas, pero ¿qué ocurre si una cadena es muy larga y la otra corta? Que el índice que existe en una no existe en la otra (porque al ser más corta tiene menos índices).
Eso da lugar a que aparezca un error "java.lang.StringIndexOutOfBoundsException: String index out of range"
La lógica que tendrías que aplicar es:
1. Determinar la longitud máxima
2. Crear un bucle desde i=0 hasta la longitud máxima
3. Si existen los dos índices para las dos palabras (es decir, su longitud es mayor o igual que la longitud máxima) mostrar la comparación, si no existen indicar que una palabra no es suficientemente larga para comparar
Te recomiendo que revises el código que se encuentra en esta solución:
https://www.aprenderaprogramar.com/foros/index.php?topic=1292.0Analízalo y estudia paso a paso qué es lo que hace, ahí encontrarás una buena orientación.
Saludos