2013-01-09 168 views
1

我正在編寫一個應該從在線XML文件讀取數據的程序。計算是通過用Scala編寫的類來完成的,如果任何異常被捕獲,它必須被拋出到處理異常的Java類。出於某種原因,我遇到了異常類型的錯誤。嘗試訪問錯誤的URL或任何類似問題(無互聯網連接)時應該拋出什麼樣的正確例外?謝謝!無法捕獲由SCALA類拋出的JAVA類中的錯誤URL的異常

主類(斯卡拉)

object test 
{ 
    def main(args:Array[String]) 
    { 
    val x:A = new A() 
    } 

} 

是解析XML文件,並嘗試訪問URL

import java.net.{URL, URLConnection} 
import xml.{XML, Elem} 
import java.lang.NullPointerException 
import java.io.IOException 


class XMLparser { 
    @throws(classOf[Exception]) 
    private val connectionXMLURL = "http://www.boi.org.il/currency.xml1" 
    private var urlConnection:URLConnection = null 
    private var url:URL = null 
    private var doc:Elem = null 
    private val currencies = new java.util.LinkedHashMap[String,java.lang.Double]() 

    try 
    { 
    url = new URL(connectionXMLURL) 
    urlConnection = url.openConnection 
    doc = XML.load(urlConnection.getInputStream) 
    } 
    catch 
    { 
     case ex: org.xml.sax.SAXParseException => //is caught!!! and thrown! 
     { 
     throw ex 
     } 
     case e: IOException => 
     { 
     throw e 
     //add error log!! 
     } 

     case e: NullPointerException => 
     { 
     throw e 
     //add error log!! 
     } 
     case e: Exception => 
     { 
     throw e 
     }  
    } 

} 

應該捕獲該異常(JAVA)

該類的類
public class A 
{ 
    private XMLparser x; 
    public A() 
    { 
     try 
     { 
      x = new XMLparser(); 
     } 
     catch(org.xml.sax.SAXParseException e) //Cannot catch it!!?? 
     { 

     } 
    /* catch (Exception e) 
     { 
      e.printStackTrace(); 
     } */ 
    } 


} 

編輯:這是我試圖捕捉異常時得到的錯誤消息:

scala: warning: [options] bootstrap class path not set in conjunction with -source 1.6 
scala: C:\Users\home\Dropbox\Exchange Currency\src\il\hit\currencyExchange\CurrencyExchangeGUI.java:138: error: exception SAXParseException is never thrown in body of corresponding try statement 
scala:  catch (org.xml.sax.SAXParseException ex) 

回答

2

問題是你需要聲明你的構造方法(默認的)會引發一個檢查到的java異常。我看到您已經將@throws(classOf[Exception])註釋添加到您的代碼中,但它對於您的目的略有不當。檢查此鏈接 https://issues.scala-lang.org/browse/SI-1420

它應該看起來像

class XMLparser @throws(classOf[Exception]) { 

     private val connectionXMLURL = "http://www.boi.org.il/currency.xml1" 
     ... 
+0

找到它感謝您的評論,請在我剛剛添加的輸出中獲得戰利品。謝謝! – undroid

+1

@AlexTal,我根據你的評論編輯了答案。謝謝。 – Claudio

+0

感謝您的幫助,像一個魅力工作。 – undroid

1

對於URLConnection,它可以SocketTimeoutException兩個連接,輸入流超時。對於不可用的網站,它也可以是IOException。 你可以在javadoc for URLConnection