2011-08-30 2 views
0

이 프로그램은 자동 완성에 관한 것입니다. textfield에 내용을 입력하면 추천 목록이 표시됩니다.Catch 문에서 SQLException을 수정하는 방법?

나는 textfield에 무엇인가를 입력 할 때 DB로부터의 제안 목록을 위해 onWordUpdated() 방법을 만든다. 당신이 어떤 라인을 알 수 있도록

exception java.sql.SQLException is never thrown in body of corresponding try statement 

내가 코드에 주석을 만든 :

자, 문제는이 오류를 가지고 있습니다.

누군가이 문제를 해결할 수 있도록 도와 줄 수 있습니까? 선택하지 않은 (RuntimeException 또는 Error에서 상속 것)와 검사 (Exception에서 상속 다른 모든) :

public void onWordUpdated(final String toComplete) 
    { 
    new Thread(new Runnable() 
    { 
     public void run() 
     { 
     try 
     { 
      final List<Suggestion> suggestions = suggestor.getSuggestions(toComplete); 
      SwingUtilities.invokeLater(new Runnable() 
      { 
      public void run() 
      { 
       try 
       { 
       suggestionWidgetModel.clear(); 
       for (Suggestion suggestion : suggestions) 
        suggestionWidgetModel.addElement(suggestion.getCaption()); 
       if (!suggestions.isEmpty()) 
        suggestionWidget.setSelectedIndex(0); 
       } 
       catch (SQLException e) // This line is my problem, Could someone help me how to fix this? Thanks.. 
       { 
       e.printStackTrace(); 
       } 
      } 
      }); 
     } 
     catch (SQLException e1) 
     { 
      onSqlError(e1); 
     } 
     } 
    }, "onWordUpdated").start(); 
    } 
+5

설명 목적으로 만 코드를 사용하십시오. 문제와 관련이없는 코드와 주석 내부에 숨겨진 질문을 이해하는 것은 어렵습니다. – topchef

+5

SQLException은 무엇을 말합니까? –

+1

정확히 무엇이 문제입니까? 코드에서 기대하는 것은 무엇이며, 실제로 무엇을하고 있습니까? 기대하지 않는 예외가 발생하는 경우 해당 내용에 대한 자세한 정보를 제공 할 수 있습니까? –

답변

7

컴파일러는 그 시점에서 해당 예외를 포착 할 필요가 없다고 말합니다.

SQLException은 확인 된 예외입니다. 즉, 명시 적으로 던져 넣거나 throws 절에 선언 한 메서드를 호출하면 코드에 코드가 표시됩니다. 이러한 특정 try/catch 블록의 코드에는 해당되지 않습니다.

내부 try/catch 블록과 아마도 외부 블록을 제거 할 수 있어야합니다.


IIRC, 선언되지 않은 체크 된 예외를 볼 이론적으로 가능하지만, 당신이 일어날 수 있도록 특별한 조치를 취할하지 않는 한이 가능성이 발생할 수 있습니다.

+0

try/catch 블록을 제거하려고하면 오류가 발생했습니다 : 스레드 "main"의 예외 java.lang.ClassNotFoundException : org.postgresql.Driver – sack

+4

다른 문제입니다. classpath에 Postgres 드라이버가 없습니다. –

+0

@Stephen - "이론적으로 선언되지 않은 검사 예외를 볼 수 있습니다"-이 문제에 대해 궁금합니다. 정교한 토론에 대해 설명하거나 링크 할 수 있습니까? –

6

자바는 두 exceptions의 유형이 있습니다 :

덕분에 ..

이 코드를 .
  • 코드 블록이 하나를 던졌습니다 경우

    , 그것은 catch 블록에서 잡은해야 또는 방법이 Exception의 유형을 던질 수 있음을 선언해야합니다 :

    는 예외는 다음과 같은 속성이 있습니다 확인.

  • 코드가 throws SomeException 인 메서드를 호출하는 경우 해당 코드도 try-catch에 있어야하거나 메서드에서 throws SomeException도 지정해야합니다.

처음 두 검사 때문에 컴파일러는 확인 된 예외가 특정 코드 블록에서 실제로 throw 될 수 있는지 여부를 감지 할 수 있습니다. 그 결과,이 세 번째 속성에 리드 : 시도-catch 블록의 캐치 절은 try 블록에서 발생할 수있는 Exception 유형을 선언

  • 경우 컴파일 오류가 생성됩니다. 컴파일러는 주로 오류가 발생했음을 알려주기 위해이 작업을 수행합니다. 예외는 발생하지 않습니다.

SQLException은 확인 된 예외이므로 해당 규칙의 적용을받습니다. 컴파일러가 컴파일 오류를 통해 사용자에게 알려주기 위해 아래 try 블록의 코드 행 (또는 호출하는 메소드)을 SQLException으로 버릴 수 없습니다.

try { 
    suggestionWidgetModel.clear(); 
    for (Suggestion suggestion : suggestions) 
     suggestionWidgetModel.addElement(suggestion.getCaption()); 
    if (!suggestions.isEmpty()) 
     suggestionWidget.setSelectedIndex(0); 
} 
catch (SQLException e) // This line is my problem, Could someone help me how to fix this? Thanks.. 
{ 
    e.printStackTrace(); 
} 
+0

try/catch 블록을 제거하려고하면 "main"스레드의 예외 java.lang.ClassNotFoundException : org.postgresql.Driver – sack