한바다
java-ArrayIndexOutOfBoundsException 오류 본문
☑️ ArrayIndexOutOfBoundsException
package com.kh.conditionEx;
import java.util.Scanner;
public class ConditionEx {
public static void method1() {
Scanner sc = new Scanner(System.in);
System.out.print("고객님의 나이를 입력하세요 : ");
int age = sc.nextInt();
// 만약에 고객의 나이가 19세 이상이라면 성인입니다. 를 출력할 것
if (age >= 19) {
System.out.println("성인입니다.");
}
}
//최종 메서드
public static void main(String[] args) {
method1();
}
위와같이 자바 제어문을 작성하고 실행 시켰는데 아래와 같은 오류가 발생 하였다
[오류내용]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at oracle.jdbc.driver.JavaToJavaConverter.main(JavaToJavaConverter.java:3786)
[오류해석]
Exception in thread 'main' java.lang.ArrayIndexOutOfBoundsException:Index 0 out of bounds for length 0
라는 오류 메세지는 배열(Array)의 인덱스를 잘못 참조했을 때 발생하는 오류로
명렬줄 인자(String[] args) 배열이 비어 있는데도 불구하고 이에 접근하려고 할때 발생한다.
내가 진행한 코드는 배열과 관련이 없는데 몇번을 반복하고 코드를 재 작성하여도 위 오류가 반복 발생하여
난감 하였다.
[오류 발생 원인]
해당코드를 다른 폴더에 기재하여 실행시에는 정상 작동되는 것을 확인하고 오류의 발생원인을 알 수 있었다.
얼마 전 톰캣과 스프링부트 설정 이후 생성한 폴더에서 해당코드 진행시 오류가 발생하였다.
톰캣과 스프링부트 관련 폴더가 함께 있었기 때문에 명령줄 인자가 충돌이 되었던 것 같다.
우선 톰캣과 스프링 부트의 설정을 확인 하였다.
1. 톰캣은 자바 서블릿을 실행할 수 있는 애플리케이션 서버로, 설정파일을 통해 실행환경을 관리한다.
톰캣의 설정 파일은 주로 conf폴더에 있다
- server.xml 확인 : 포트번호를 변경하고 싶으면 <Connector port="8080".../>수정
- catalina logs확인 : 로그파일 확인 시 오류의 원인 파악에 도움
2. 스프링 부트 설정 확인
스프링부트는 내자오딘 톰캣 서버를 통해 애플리케이션을 실행하므로 스프링 부트 애플리케이션 설정을 변경하거나 확인
- application.properties 에서 포트번호 변경
- 스프링부트에서 경로를 설정 시 server.servlet.context-path=/myapp 사용
▶ 즉 스프링부트에서는 내장 톰캣의 설정을 application.properties에서 관리하고, 독립적인 톰캣 서비는 server.xml과 같은 설정 파일을 통해 관리된다
▶ 그러나 위 방법으로는 오류가 해결되지 않았고 추가적으로 확인해본 방법에서 오류해결 실마리를 찾았다.
이클립스 개발환경에 스프링부트와 톰캣관련 폴더와 자바폴더를 함께 생성하고 실행하니깐
demoProject1에 아래 코드와 최종메서드가 충돌이 난 것 같았다!
오류를 해결하기 위해 톰캣,스프링부터 폴더는 삭제후 다른 폴더로 옮겨 주었다.
폴더를 삭제 후 아래 두가지 문제점이 발생 하였다.
1.파일탐색기에 폴더를 삭제 후 이클립스 개발환경에서 폴더를 삭제해주고 실행시 오류 얼럿이 떳다
오류메세지는 JavaToJavaConverter.49라는 런치 설정이 존재하지 않는 프로젝트(demoProject1)을 참조하고 있다는 내용!
즉 프로젝트가 이미 삭제 되었는데 이전에 생성된 런치 설정 파일이 남아 있었다!
따라서 이클립스 프로젝트 탐색기에서 삭제되었는지 확인하고 잘못된 런치 설정을 삭제 하였다
Eclipse 상단메뉴에서 Run -> Run Configuration으로 이동하여
왼쪽 목록에 얼럿에서 보았던 JavaToJavaConverter.49와 관련된 런치 설정을 찾아서 삭제한다
위와 같이 통합개발환경 이클립스에서 자바,스프링부트,톰캣을 각각의 폴더를 나눠서
실행하니 충돌이 발생하여 실행결과 오류가 생성되었다!!
통합개발환경에서는 여러가지를 같이 쓰지 않도록 하는게 좋을 것 같다!!