• ベストアンサー

「例外 *** は対応する try 文の本体ではスローされません。」について。

以下のソースをコンパイルすると, simulator/showManualPage.java:21: 例外 java.net.URISyntaxException は対応する try 文の本体ではスローされません。 } catch (URISyntaxException ex) { ^ simulator/showManualPage.java:23: 例外 java.io.IOException は対応する try 文の本体ではスローされません。 } catch (IOException ex) { ^ とエラーを返されます。 調べたところ、スローされるはずのない例外をキャッチしようとしている、というエラーだとは分かりましたが、スローは書いているので原因が分かりません。 やり方が悪いのでしょうか? package simulator; import java.awt.event.*; import java.awt.Desktop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; public class showManualPage implements ActionListener { public void showManualPage() throws URISyntaxException, IOException { // Get Desktop Object Desktop desktop = Desktop.getDesktop(); desktop.browse(new URI("http://google.co.jp")); } public void actionPerformed(ActionEvent event) { try { // Run browser new showManualPage(); } catch (URISyntaxException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } }

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.2

つまり public void showManualPage() throws URISyntaxException, IOException { をコンストラクタにするため voidを取り public showManualPage() throws URISyntaxException, IOException { とする。(コンストラクタにvoidを付けてはいけません) 参考までに、クラス名は、大文字で始めたほうがわかりやすいです。 つまり3箇所の文字列showManualPageは、すべてShowManualPageに変更しましょう。

ffd
質問者

お礼

こちらでもコンパイル通りました、ありがとうございました。 今後クラス名にも注意します。

その他の回答 (1)

回答No.1

public void showManualPage() throws URISyntaxException, IOException { } /* これはコンストラクタではなく普通のクラスのメソッド */ new showManualPage(); /* ← コンストラクタの実行を指定している */ newを取っ払ってインスタンスのメソッドを実行する形にするか もしくは、コンストラクタを定義するなり,今のメソッドを書き換えればコンパイルエラーはなくなる

ffd
質問者

お礼

newを消したらコンパイル通りました、ありがとうございました。

関連するQ&A