2012-03-24 8 views
3

をURLオブジェクトの明示的なコンストラクタを定義するために、私はラインで処理(またはJava)でURLを定義しています:どのようにJavaの

URL base = new URL("http://www.google.com/"); 

だから私は次のエラーを取得する:デフォルトのコンストラクタが例外を処理できませんタイプMalformedURLException暗黙のスーパーコンストラクタによってスローされます。明示的なコンストラクタを定義する必要があります。私が仮定しているのは、私のURLが有効でないなら、(私がtryの外の私のURLを宣言しているので)対応するcatchがエラーを捕まえることができないからです。

私のメインのtryブロックがループにあり、URLが静的であるため、このURLをtryの外に定義したいとします。したがって、URLの定義を複数回行う必要はありません(静的であるため、MalformedURLExceptionsを恐れることはありません)。

どうすればよいですか?別のtryブロック内にURLを定義する以外の方法はありませんか? (つまり、単純な静的なURLのために少し多すぎるようなので)


// import libraries 
import java.net.*; 
import java.io.*; 

// url 
URL base = new URL("http://www.google.com"); 

void setup() { 
} 

void draw() { 
    try { 
    // retrieve url 
    String[] results = loadStrings(base); 

    // print results 
    println(results[0]); 
    } 
    catch (MalformedURLException e) { 
    e.printStackTrace(); 
    } 
    catch (ConnectException e) { 
    e.printStackTrace(); 
    } 
    catch (IOException e) { 
    e.printStackTrace(); 
    } 

    // stop looping 
    noLoop(); 

} 

答えて

12

をあなただけでMalformedURLExceptionをスローあなたのクラスのデフォルトコンストラクタを定義する必要があります。

class MyClass { 
    private URL url = new URL("http://www.google.com"); 

    public MyClass() throws MalformedURLException {} 
} 

コンストラクタJavaがあるため、エラーが起こっていますあなたのクラスのための生成は何もスローすることはできません、あなたはそれを指定する必要があります。あなたのコードを見て

編集

、あなたの他のオプションは、この(私は(セットアップを想定)を使用すると、URLを使用する前に呼び出される)

URL url; 

void setup() { 
    try { 
     url = new URL("http://www.google.com"); 
    } catch (MalformedURLException ex) { 
     throw new RuntimeException(ex); 
    } 
} 
+0

しかし、これは自分で作成したクラスではなく、標準の[javaクラス](http://docs.oracle.com/javase/6/docs/api/java/net/URL.html)です。あなたはそのような場合に示唆したように私はまだデフォルトのコンストラクタを定義する必要がありますか?または私は誤解ですか? –

+0

次に、このエラーが発生している場所のコードを確認する必要があります。このURLを使用している場所の周りにコードを投稿できますか? – Collin

+0

もちろん、私の質問の最下部に私のコードを追加しました(これはコードbtwを処理していますが、標準のjavaとは多少異なるかもしれません)。 –

1

URLコンストラクタは、あなたがそれをキャッチしたりそれを再スローするか持ってチェック例外がスローされますので。

public class URLFactory { 
    public static URL create(String urlString) { 
    try { 
     return new URL(urlString); 
    } catch (MalformedURLException e) { 
     throw new RuntimeException(e); 
    } 
    } 
} 

または多分ちょうどこのお使いの環境では:あなたはRuntimeExceptionでそれをラップし、独自のファクトリメソッドを作成することができますか?

URL createURL(String urlString) { 
    try { 
    return new URL(urlString); 
    } catch (MalformedURLException e) { 
    throw new RuntimeException(e); 
    } 
} 

、代わりにそれを使用します。

URL base = URLFactory.create("http://www.google.com"); 
+0

OKです。あなたは少し詳しく説明できますか?それ、どうやったら出来るの? –

+0

確かに、コードサンプルを編集しました。 –

+0

提案していただきありがとうございます、私はあなたのruntimeexceptionをコードに追加しました。 –