본문으로 바로가기

자바(JAVA) 에러코드

category IT/컴퓨터 2017. 9. 14. 09:42


자바(JAVA) 에러코드


Error 표시

에러 내용

에러 처리 방법

Exception in thread "main" java.lang.NoClassDefFoundErroe:파일명

클래스 파일을 찾을 수 없는 경우

실행하려는 클래스 파일 이름이 제대로 되어 있는지 확인. 또한, CLASSPATH 설정이 제대로 되어 있는지 확인하며(DOS Mode에서 set 명령어) 만약, 설정이 되어 있지 않다면 설정함.(CLASSPATH = jdk버전번호/jre/lib/rt.jar;)

cannot resolve symbol

symbol : class in(에러가 난 부분)

location : class StackTest(찾으려는 위치)

이해할 수 없는 클래스나 메소드, 변수명이 올 경우

보통 이 에러는 철자가 틀렸을 경우에 많이 발생. 클래스, 메소드, 변수의 철자를 세심하게 확인. 특히, 철자를 확인할 때 대/소문자 구분을 확실하게 체크. (자바는 대/소문자를 구별한다.) 그리고 클래스에서 발생할 경우 import를 선언해 주었는지 확인.

non-static variable 변수이름(or method 메소드 이름) cannot br referenced from a static context

static 메소드 안에서 static으로 선언되지 않은 메소드나 변수를 참조(사용)했을 경우 특히, 메소드의 경우는 인스턴스를 사용하지 않고 static 메소드 내에서 바로 선언할 경우

static 선언자의 사용 여부를 살펴보고 static 메소드 안에 static으로 선언되어지지 않은 메소드나 변수가 있는지 확인. 만약 그런것이 있으면 메소드를 새로 만들어 그쪽에서 선언. , 반드시 인스턴스를 생성해서 불러줘야 함.

valiable 변수명 might not have been initialized

지역변수인 변수명의 변수가 초기화가 되어 있지 않았을 경우

지역변수(메소드 내에서 선언한 변수)를 초기화 하지 않은 채 선언했을 경우 발생

멤버 필드가 아닌 경우는 반드시 변수 선언시 초기화(멤버 필드는 자바 프로그램 자체에서 자동으로 Default 값으로 초기화)

class 클래스명 is public, should be declared in a file named 클래스명.java

클래스명이 public으로 선언되었는데 파일명과 다를 경우

public으로 선언된 클래스가 있다면 반드시 그 클래스명과 파일명이 같아야 함. 클래스명과 파일명의 대/소문자 및 철자가 같은지 확인. 또한, public으로 선언된 클래스가 하나 이상 있는지 확인.(반드시 하나만 있어야 함.)

push(java.lang.objrct)[메소드(인자로 받을 수 있는 형)] in java.util.Stack(메소드의 클래스) cannot be applied to (int)[잘못 들어간 형]

메소드에서 인자를 받을 때 받을 수 있는 형이 아닌 자료형 또는 클래스형을 사용할 경우

사용하는 메소드의 API를 참고하여 어떤 형을 인자로 받을 수 있는지 확인. API를 보지 못할 경우는 각 자료형으로 인자를 직접 바꾸어 볼 것.

java.lang.NoSuchMethodError: main

Exception in thread :main"

클래스 파일 안에서 main() 메소드를 찾을 수 없는 경우

자바 애플릿이 아닌 이상 자바 애플리케이션은 반드시 main() 메소드를 사용해야 함. main() 메소드를 빼먹지 않았는지 확인. 또한, public static void main(String[] args) 형식으로 쓰여졌는지 확인. (main 클래스는 반드시 위와 같은 형식으로 만들어져야 함.)

unreported exception java.io.IOException(Exception); must be caught or declared to be thrown

예외가 발생하는데 예외 처리를 해주지 않았을 경우

예외를 발생하는 메소드 같은 경우는 반드시 예외 처리를 해주어야 함. 예외를 발생하거나 예외 처리를 해야하는 메소드는 API를 확인해 보면 알 수 있음. 그렇지 않다면 컴파일 후 지금처럼 에러가 난 예외를 예외 처리해주면 됨. 또한, 예외를 처리할 때는 메소드 차원에서 throws 예외명을 이용하여 처리할 수 있고 try{} catch{} 구문을 이용하여 직접 처리해 주어도 됨. 특히, 예외도 클래스이므로 반드시 예외가 들어간 패키지를 import 해 줌.

Note : Calculator.java(파일명) uses or overrides a deprecated API.

JDK 버전이 높아졌거나 보안 등의 이유로 사용이 deprecated된 메소드를 사용한 경우

예외라기 보다는 경고 메시지로 JDK 가 버전이 높아지거나 보안 등의 이유에 따라 예전에 만들어졌지만 필요가 없어지거나 대체된 메소드가 생김.이런 메소드를 deprecated 되었다고 하는데, 이는 API 통해 확인 가능. 또한, 컴파일할 때 -deprecation 옵션을 주면 어떤 메소드가 deprecate 됐는지 확인 가능. 사용이 중지 됐다고 보기 보다는 사용을 가능하면 하지 않게끔 하는 것으로 대치되 었거나 버전 업된 메소드를 사용하면 됨.

MouseEvent(클래스명) should be declared abstract; it does not define mouseDragged(java.awt.event.MouseEvent)[메소드명(메소드가 포함된 클래스)] in MouseEvent(클래스명)

implementsinterface의 모든 메소드를 구현하지 않아서 발생됨

interface는 모든 메소드가 선언만되고 구현되지 않은 추상(abstract) 메소드. 만약, interfaceimplements하려면 implements한 클래스가 interface에서 선언한 모든 메소드를 구현해 주어야 함. 하나라도 빠질 경우 implements한 클래스도 추상 클래스로 보고 에러가 발생. 에러에 구현해 주어야 할 메소드명이 나오므로 그곳에 쓰여있는 메소드를 구현해주면 됨. 만약, 그 메소드를 구현해 주었는데 에러가 발생하면 철자 및 대/소문자를 다시 확인할 것 .

incompatible types found : /null(입력한 자료형) required : int(요구하는 자료형)

입력했을 때 맞지 않는 자료형이나 클래스형을 입력할 경우

incompatible은 성미가 맞지 않는, 모순된 이라는 뜻을 가진 단어로 단어의 뜻처럼 입력 경우 required에 나타난 자료형 및 클래스형을 요구하는데 found에서 나타난 자료형 및 클래스형을 써주어서 입력을 하지 못하게 되어서 발생하는 에러. found에 나타난 자료형을 required에 나타난 자료형으로 변경해 주면 됨.

package java.servlet(패키지명) does not exist

import한 패키지가 존재하지 않을 경우

import한 패키지가 존재하지 않을 경우에 발생하는 에러로 철자와 대/소문자를 먼저 확인하고 CLASSPATH 설정을 확인. 또한, 그 곳에 패키지가 jar 파일로 있는지도 확인. (API에 나와 있는 패키지는 rt.jar에 다 있음.) , javax가 붙거나 다음으로 시작되는 확장 패키지를 설치해 주어야 함. avax.swing 제외)

java.lang.NullPointerException

Exception in thread "main"(메소드) java.lang.NullpointerException

at java.awt.Container.addlmpl(Container.java:341)...[에러가 발생한 부분]

참조하거나 사용한 클래스 또는 자료형이 초기화되지 않은 경우

보통 이것은 awt나 배열 부분에서 자주 발생하는데 초기화를 해주지 않아서 많이 발생. 자바의 변수들은 기본적으로(자동으로 초기화 되는 멤버 필드 등을 제외하고) 초기화를 요구. 에러에 체크된 부분을 검토해 보고 초기화.

';'(빠진 부분) expected

문법상으로 써야할 것을 쓰지 않은 경우

주로 ';'을 안써주거나 아니면 '()'(괄호)를 열기만 하고 닫지 않은 실수를 할 경우 발생하며 대부분 이 에러가 발생한 경우는 에러에 나온것을 소스에 추가해 주면 됨.

unexpected type

required : value(요구하는 타입)

found : class(소스상 써준 타입)

써주어야 할 타입이 아닌 잘못된 타입을 써주었을 경우

unexpected type 에러를 해석하면 기대하지 않은 타입이란 뜻으로 원하는 타입 (required)이 아닌데 잘못된 타입(found)을 써준 경우 발생. 에러 체크된 부분의 타입을 required에서 나타난 타입으로 변경해 주면 됨.

java.lang.ArrayIndexOutOfBoundsException at Test.amin(Test.java:10)[클래스.메소드(파일명:에러난 위치)]

Exception in thread "main"(예외가 던져진 메소드)

배열의 범위를 넘어선 값을 넣었을 경우

위의 에러는 특이하게 컴파일은 이상 없이 되지만 실행을 하면 발생하는 에러. 배열의 범위를 넘어선 경우 발생하므로 에러난 위치의 배열의 참조 범위를 확인해보고 선언해준 배열의 범위에 맞게 조정.

illegal start of expression

선언자(modifier)를 잘못 넣은 경우

에러의 단어 뜻은 표현의 시작이 부적격 하다 라는 의미로 보통 선언자가 맞지 않거나 쓰일때가 아닌데 선언자를 사용한 경우 발생. 특히, 메소드안에서 static 선언자를 사용한 경우 발생. 에러가 발생한 부분의 선언자를 제거하거나 맞는 것인지 다시 확인.

java.io.InputStream(클래스) is abstract; cannot be instantiated

abstract로 선언된 클래스를 직접 new 명령어를 이용하여 인스턴스화 할 경우

abstract로 선언된 클래스를 직접 new 명령어를 이용하여 인스턴스화 할 경우 발생하는데, 이는 추상 클래스는 직접 new 명령어를 이용하여 인스턴스화 할 수 없기 때문임. 이런 경우 인스턴스를 다른 방법으로 생성하면 되는데, 예를 들어 인스턴스를 반환하는 메소드를 이용한다거나 상속을 통해서 상속받은 클래스의 인스턴스를만들어 직접 인스턴스를 만드는 효과를 낼 수도 있음.

local variable name(변수명) is accessed from within inner class; needs to be declared final

Local Class의 변수를 final로 선언하지 않은 경우

Local Class의 변수는 참조 변수의 참조값 변동을 방지하기 위하여 final 선언자를 붙여주어야 함변수에 final 선언자를 붙이면 변수는 값을 변동할 수 없는 상수처럼 쓰이며 만약 이 값을 참조할 경우 자바는 이 값을 넘기는게 아니라 이 값의 복사본을 참조값으로 넘기게 됨. 그러므로 Local Class 에서 참조값 변동 없이 변수를 참조할 수 있게 되는 것임. Local Class를 정의해준 곳을 살펴보고 final 선언자를 확인.

inner classes cannot have static declarations

내부 클래스 안에서 static 선언자를 쓴 경우

내부 클래스 안에서는 static 선언자를 쓸 수 없음. 내부 클래스 안에서 사용된 static 선언자를 제거.

referenceto List is ambiguous, both class java.util.List(클래스) in java.util(패키지) and class java.awt.List(클래스) in java.awt(패키지) match

 

클래스 사용시 다른 패키지내에 동일 이름의 클래스들이 있어서 참조가 모호할 경우

import한 패키지 중에 같은 이름을 사용하는 클래스를 클래스 이름만으로 생성함으로써 참조가 모호해질 경우 발생. 이와 같은 경우는 import를 하나 제거하거나 아니면 java.util.List 이런식으로 직접 그 클래스의 패키지를 같이 써줌으로써 모호성을 제거할 수 있음.

m()(메소드명) in B(클래스명) cannot override m()(메소드명) in A(클래스명);

attempting to use incompatiable return type

클래스를 상속받고서 메소드를 오버라이드 하고자 할 때 잘못한 경우

클래스를 상속 받고서 메소드를 오버라이드 할 경우에는 다음과 같은 규칙을 지켜야 함.

1. 메소드의 이름이 같아야 함.

2. 메소드의 파라미터 개수, 데이터형이 같아야 함.

3. 메소드의 리턴형이 같아야 함.

4. 상위 메소드와 동일하거나 더 구체적인 Exception을 발생시켜야 함.

5. 상위 메소드와 동일하거나 접근 범위가 더 넓은 접근 제한자를 사용해야 함.

 

getPathBetweenRows(int, int)(메소드) has protected access in javax.swing.jTree

 

(클래스)

protected로 선언된 메소드를 상속 없이 직접 불러올 경우

protected로 선언되어 있는 메소드는 상속하거나 같은 Package에 있을 때만 쓸 수 있음. 상속하여 다시 public 메소드로 값을 받던지 아니면 public 메소드 중에서 비슷한 기능을 하는 메소드가 있는지 찾아서 바꾸어 주어야 함.

invalid method declaration; return type required

리턴 타입을 쓰지 않아 메소드의 선언이 잘못된 경우

리턴 타입을 쓰지 않아 메소드의 선언이 잘못된 경우 발생하므로 에러가 발생한 메소드를 확인해보고 리턴 타입을 맞추어 줌.

Error occurred during initialization of VM java.lang.ExceptionInInitializerError

static으로 선언된 변수중 초기화가 안되어 있는 것이 있는 경우

static으로 선언된 변수중에 초기화가 안된게 있는 경우 발생하며 에러가 발생한 변수를 확인해보고 알맞게 초기화를 시켜주거나 변수의 위치를 자동 초기화가 가능한 메소드 밖의 클래스 변수로서 사용하게 함.

Error opening registry key 'Spftware\JavaSoft\Java Runtime Environment'

Error: could not find java.dll

Error: could not find Java 2 Runtime Environment

중복 설치 등으로 인해 레지스트리 키 값이 잘못된 경우

중복 설치 등으로 인해 레지스트리 키 값이 잘못되어 있는 경우 발생하며 레지스트리 편집기를 열어 HKEY_LOCAL_MACHINE SOFTWARE JavaSoft에 가보면 3개의 키가 있는데, 그 중에서 첫번째 키인 Java 런타임 환경을 마우스 오른쪽 버튼을 클릭하여 Java Runtime Environment로 이름을 바꾸어 줌.

Error Registry Key 'Software\JavaSoftware\Java Runtime Environment\CurrentVerison' has value '1.1', but '1.3' is requied.

Error: could not find java.dll

Error: could not find java 2 Runtime Environment.

중복 설치 등으로 인해 레지스트리 키 값의 자바 버전이 잘못된 경우

중복 설치 등으로 인해 레지스트리 키 값의 자바 버전이 잘못되어 발생하며 레지스트리 편집기를 열어서 HKEY_LOCAL_MACHINE SOFTWARE JavaSoft Java Runtime EnvironmentCurrent version의 값을 1.3으로 값이 되어 있는지 확인.

java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver(드라이브명)

JDBC로 데이터베이스에 연결하는 중 드라이버를 찾지 못할 경우

JDBC를 연결하는 중에 드라이버를 찾지 못할 경우에 발생하며 각 데이터베이스에 맞는 드라이버가 제대로 다운로드 되었는지 확인해보고 드라이버의 위치가 클래스 패스에 설정되어 있는지 확인.

 

Method printLn(java.lang.String)(메소드명) not found in class java.io.PrintStream (클래스명)

자신이 사용한 클래스의 메소드가 맞지 않는(없는) 경우

자신이 사용한 클래스의 메소드가 맞지 않는(없는) 경우 발생하며, API를 통해서 사용하고자 하는 클래스와 메소드를 확인. 보통 이런 경우 메소드의 철자나 대/소문자를 잘못 쓴 경우가 많으므로 꼼꼼히 확인해 보고 마지막으로 철자와 대/소문자도 맞는다면 메소드의 인자의 객체형을 맞게 주었는지 확인.


오늘도 좋은 하루 보내세요!!  Have a nice day!!

[광고]


댓글을 달아 주세요