2011-08-30 104 views
0

这个程序是关于自动完成的。当我输入textfield时,会出现一个建议列表。如何解决Catch语句中的SQLException?

当我在textfield上输入内容时,我会对DB的建议列表做出方法onWordUpdated()。现在

,问题是我有这样的错误:

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

我在代码中所做的评论,这样你就会知道哪些线。

有人可以帮我解决这个问题吗?

感谢..

我有这样的代码:

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

这是一个不同的问题。您的类路径中没有Postgres驱动程序。 –

+0

@Stephen - “理论上可以看到没有被声明的检查过的异常” - 我对此很好奇。你能否解释或链接到一个讨论详细说明? –

6

Java有两种类型的exceptions:选中(那些从RuntimeExceptionError继承),并检查(从Exception继承所有其他) 。

检查异常具有以下属性:

  • 如果一个代码块抛出一个,它必须在catch块被捕获或者该方法必须声明它可能抛出该类型的Exception
  • 如果某些代码调用方法throws SomeException,那么该代码也必须处于try-catch或其方法中,还必须指定throws SomeException

由于前两次检查,编译器可以检测到检查的异常是否可以实际抛出某个代码块。其结果是,这导致了第三个属性:

  • 如果try-catch块的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