• 締切済み

ボタンを押してIPを表示させたい。

javaの勉強をJbuilderを使って始めました。 他の言語のスキルもかなり頼りない程度です。 質問なんですが、自分のマシンのIPを調べるというJavaプログラムを本で見つけそれをDOS上で コンパイルし実行したところDOSプロンプト上にIPがちゃんと表示されました。 ~略   try{ InetAddress local = InetAddress.getLocalHost(); System.out.println( local ); } catch( Exception e ){ 略~ という内容なんですが、これをjbuilderを使って フレームにボタンとラベルを配置して、ボタンを押したら ラベルにIPが表示されるようにしたいんですがうまくいきません。 void jButton2_actionPerformed(ActionEvent e) {     try{     InetAddress local = InetAddress.getLocalHost();     jLabel1.setText(local);     }      catch(Exception e ){      System.err.println("error");      System.exit(1);     } というようなアクション内の内容なんですが、どのへんがおかしいのでしょうか? いろいろ試してみてだんだんシンプルになってきたのですが根本的に間違ってるのでしょう。  疑問として、取得したIPは文字列なのか? toStringというのをよく見かけるけれど必要なのか? NEWを使わずにいきなり InetAddress local = InetAddress.getLocalHost(); この一文で良いのか? などなどわからないことだらけです。 プログラム初心故、見当違いな言葉使い、質問など多いと思いますが、 どなたかわかりやすく解説お願いします。

  • Java
  • 回答数1
  • ありがとう数2

みんなの回答

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

> 疑問として、取得したIPは文字列なのか? > toStringというのをよく見かけるけれど必要なのか? 取得したIPはInetAddressクラスのインスタンスです。(だから戻り値をInetAddress型の変数に代入しているんですよ) したがって、toString()メソッドで文字列に変換しないといけません。 > NEWを使わずにいきなり > InetAddress local = InetAddress.getLocalHost(); > この一文で良いのか? getLocalHost()はスタティックなメソッドなので、newを使わなくてもそのまま使えます。 あと、イベントリスナの実装のしかたがすこし違っています。Javaでのイベントの扱いについて、もう少し参考書などで確認なさってください。Javaでは、メソッド名でイベントが発生するコンポーネントを指定するのではなく、リスナをコンポーネントに「追加」することによって対象のコンポーネントを指定します。 具体的には、リスナのメソッドは次のようなものになると思います。 public void actionPerformed(ActionEvent event) {   try {     InetAddress local = InetAddress.getLocalHost();     jLabel1.setText(local.toString());   } catch (Exception e) {     jLabel1.setText("エラー発生");   } } どちらにしても、余り欲張らずに、最初はウィンドウの表示、続いてイベントの処理、さらにIPアドレスと組み合わせ、といったようにゆっくりと進めていったほうがいいと思います。

nakanoma
質問者

お礼

ありがとうございました。 IP表示できました! そうですね、イベントリスナといわれてもピンとこない 初心者がちょっと欲張りすぎたようです(笑) 順々にjavaの仕組みを覚えていこうと思います。 助かりました。

関連するQ&A

  • throw文について

    上と下のソースプログラムがよく似ているのにもかかわらず上記のプログラムでコンパイルエラー発生する理由がわかりません。 解決方法はpublic static void badMethod()throws IOException{に書き換えるということが分かっていますがイマイチ理屈が分からない次第であります。 たぶん、上記のプログラムはimport文があるからだと思うのですが回答のほどよろしくお願い致します。 (コンパイルエラー) import java.io.IOException; class TryCatch{ public static void main(String args[]){ try{ badMethod(); System.out.println("A"); } catch(IOException ex){ System.out.println("B"); } catch(Exception e){ System.out.println("C"); } System.out.println("E"); } public static void badMethod(){ throw new IOException(); } } (コンパイル正常) public class X{ public static void main(String args[]){ try{ badMethod(); System.out.println("A"); } catch(Exception ex){ System.out.println("B"); } finally{ System.out.println("C"); } System.out.println("D"); } public static void badMethod(){ throw new RuntimeException(); } }

  • 他ファイルで定義された自作例外の受け方

    他ファイルで定義された自作例外の投げ方と受け方を 教えて下さい。 // ------ Class.java ---> import java.io.*; public class Class1 {  static Class2 oClass2;  public static void main (String[] args)  {   try {    oClass2 = new Class2();    System.out.println("main");    oClass2.vfFunc();   } catch (MyException e) {    System.out.println("catch MyException");   } catch (Exception e) {    System.out.println("catch Exception");   }  } } // <------ Class1.java --- // ------ Class2.java ---> import java.io.*; public class Class2 {  public Class2()  {   System.out.println("Class2コンストラクタ");  }  public void vfFunc()  {   System.out.println("Class2 vfFunc");   throw new MyException();  }  public class MyException extends Exception  {   public MyException()   {    System.out.println("MyException");   }  } } //<------ Class2.java ---

    • ベストアンサー
    • Java
  • javaでエラーを起こす変数の特定

    こんにちは. java初心者です. try~catchでエラー処理を行うことについて質問です. try~catchでは,エラーを起こした変数を特定することは出来ないのでしょうか? 例えばアプレットで画像を表示させる下記のコードについて, img1とimg2の変数を使いますが,img1に読ませるファイルは存在するが img2に読ませるファイルが存在しない場合に,「img2に読み込ませるファイルが存在しません」と表示したいのです. このようにどの変数がエラーを起こしたかを特定することはできますか? ============== import java.awt.*; import java.applet.*; import java.awt.event.*; public class Sample extends Applet{ Image img1, img2; int x=0, y=0; public void init() { System.out.println("init"); try{ img1 = getImage(getClass().getResource("img/sample1.jpg")); img2 = getImage(getClass().getResource("img/sample2.png")); } catch(Exception e){ System.out.println("エラー" + e + "が返されました."); } } public void paint(Graphics g){ g.drawImage(img1, 0, 0, this); g.drawImage(img2, 50, 50, this); } } ============== try{  img1に関する処理 } catch(Exception e){ img1に関するエラー処理 } try{  img2に関する処理 } catch(Exception e){ img2に関するエラー処理 } とやればできそうですが,あまりに冗長なので他に方法があると思うのですが… 自分もまだ勉強しはじめたばかりなので,初歩的な質問で恐縮です. 教本やネットで調べても分からなかったので質問させていただきました. よろしくお願いいたします.

    • ベストアンサー
    • Java
  • 書き込みエラーの意味

    カテゴリに自信がありません。 初心者です。 よろしくお願いいたします。 最後に catch (Exception e) { System.out.println("書き込みエラー:" + e); System.exit(1); } をつけた、javaのプログラムを実行すると、 書き込みエラー:java.lang.ArrayIndexOutOfBoundsException: 365 というメッセージが出ます。 同じプログラムでも何度も実行するとその度に最後の「365」の部分の数字が変わります。 このエラーの意味のわかる方いらっしゃいましたら教えて下さい。 よろしくお願いいたします。

  • Oracleに接続すると、それ以降の処理を素通りしてしまう

    下記のようなメソッドで<1><2>の後、すぐに<7>に処理をしてしまいます。 <1>~<7>と動くと思っていたのですが、<3>~<6>が全て無視されます。 どこか問題があるのでしょうか? ちなみに、<1>で無効なURLを指定するとSQLExceptionでcatchされます。 try { Class.forName("oracle.jdbc.OracleDriver"); try { //<1> conn = DriverManager.getConnection (URL, UID, PSW); //<3> System.out.println("Oracleと接続しました"); } catch (SQLException e) { System.out.println("oracle接続エラー"); } catch (Exception e) { System.out.println("oracle接続エラー"); } //<4> try { //<5> stmt = conn.createStatement(); //<6>sql文の作成 // select文の実行 //(略) } catch (Exception ex3) { System.out.println("なんかエラーです"); } } catch (Exception e){ System.out.println("その他エラーです"); //<2> } finally { //特になし } //<7> return list;

    • ベストアンサー
    • Java
  • プログラムからの返答の意味がわかりません..

    import java.io.*; public class Teme { public static void main(String [] args) { String [] command = { "C:\\Users\\yuzumodoki\\Desktop\\chunkparser-1.0\\chunkparser-1.0\\parser.exe", "aaaa" }; // 外部プログラムを実行 Runtime runtime = Runtime.getRuntime(); Process process = null; try { process = runtime.exec(command); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } // 外部プログラムの標準出力から読み込み BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); System.out.println(br); try { String line; while((line = br.readLine()) != null) { System.out.println(line); } } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } finally { try { br.close(); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } } } } 上記のプログラムはparser.exeにアクセスし,そのアプリケーションに文字列を送り,処理をしてその結果を取得するというものです. 本来"aaaa"と送ると"(aaaa aaaa)"と返ってくるプログラムなのですが, java.io.BufferedReader@89ae9e と返ってきます.これはなぜだかわかる方いらっしゃいますか?また,aaaa aaaaと本来の値を返すにはどうすればいいかわかる方いらっしゃいませんか.. もしわかる方いらっしゃたら教えて頂けたらすごくうれしいです(つj)

  • RuntimeExceptionであるかの判断

    以下のようなtry-catch文(抜粋)があった場合について 質問します。 try{ String[] array = {"A","B","C"}; System.out.println(array[3]); } catch(RuntimeException e){ System.out.println("RuntimeException発生"); } 今回はtryで配列に関する記述がされていますが、 その他のトラブルを想定して記述が行われることもあると思います。 catchで例外クラスがExceptionではなく、 RuntimeExceptionである場合、 どのようなトラブルがRuntimeExceptionに当たるのか わからないでいます。 教えて頂けるでしょうか?

    • ベストアンサー
    • Java
  • javaの文字化け

    自分はプログラミング初心者です。以下のようなプログラムで新しいメモ帳ファイルに数字を出力しようとすると文字化けしてしまいます。どうすれば文字化けを直せるのでしょうか? よろしくお願いします。 import java.io.*; class Number { public static void main(String args[]) { try { FileOutputStream fos = new FileOutputStream(args[0]); DataOutputStream dos = new DataOutputStream(fos); int count = 0; int j = 1; do { dos.writeShort(j); j += 3; } while(++count < 15); fos.close(); } catch(Exception e) { System.out.println("Exception: " + e); } } }

    • ベストアンサー
    • Java
  • 処理速度

    プログラムの処理の速度について聞かせてください。 /*SpeedTest*/ import java.io.*; public class SpeedTest{ public static String St(){ String fname = "hello.txt"; try{ BufferedReader br = new BufferedReader(new FileReader(fname)); String str = br.readLine(); }catch (Exception e){ e.printStackTrace(); } return ""; } public static void main(String[] args){ long s = System.currentTimeMillis(); for(int t = 0; t < 50; t++){ SpeedTest.St(); } long g = System.currentTimeMillis(); System.out.println(( g - s ) + " ms." ); } } のプログラムを、コマンドプロンプトで実行すると、「900 ms」なのに対して、JBuilderでは、「100 ms」です。 もちろん、同じマシン上で、J2SDKも同じ、1.4.0です。 なぜ、これほどに処理が違ってくるのでしょうか・・? 環境は、win2kです。 JVM関係なのでしょうか?

    • ベストアンサー
    • Java
  • [JAVA]try 内の変数を外で!?

    お世話になります! try{ int rsCount = ... ... }catch(Exception e){ ... } out.println(rsCount); とした場合、初期化されていない可能性があるとかで使えません。 try catch 内で定義したものは使えないのですか?? 反対に、どうすれば解決できますか?

    • ベストアンサー
    • Java