1

オンライン XML ファイルからデータを読み取るプログラムを作成しています。計算は Scala で記述されたクラスによって行われます。例外がキャッチされた場合は、例外を処理する Java クラスにスローする必要があります。何らかの理由で、例外タイプのエラーが発生します。不正な URL または同様の問題 (インターネットに接続されていませんか?) にアクセスしようとしたときにスローされる正しい例外はどれですか。ありがとう!

メインクラス (Scala)

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)
4

2 に答える 2

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"
      ...
于 2013-01-09T12:54:20.330 に答える
1

の場合、接続タイムアウトと入力ストリーム タイムアウトの両方URLConnectionに使用できます。SocketTimeoutExceptionまたIOException、利用できない Web サイトの場合もあります。これは、次のjavadoc にあります。URLConnection

于 2013-01-09T13:03:41.113 に答える