Javaアルゴリズム web上のソースコードでの質問

このQ&Aのポイント
  • Javaアルゴリズムについての質問とエラーの修正について
  • Javaアルゴリズムのソースコードの質問と修正方法
  • Javaアルゴリズムのソースコードの質問とエラー解決方法
回答を見る
  • ベストアンサー

Java アルゴリズム web上のソースコードで

こんにちは。 趣味でプログラミングをしているものです。 定番のアルゴリズムについてみているうちに、下記のような サイトを見つけたのですが、 http://www-ui.is.s.u-tokyo.ac.jp/~takeo/book/algorithm/index.html まず、上記のサイトから ( パッケージ全体のダウンロードはこちら ) のリンクから、 お手数ですが、ソースコードをダウンロードしていただきたいのですが、 「 complete 」のフォルダーの 「 dijkstra 」のMain.javaを見ていて、 いくつかわからないことがありましたので、質問させていただきます。 (1) 194行めからのメソッド set_random_costs() 内において、 最後のほうで、repaint() をコールしていますが、 これは、どのクラスの repaint() なのでしょうか。 (2) コマンドプロンプトから起動すると 「 Appletを継承したMainのインスタンス 」を「JFrameクラスのインスタンス」にaddして 表示されるようでしたので、 コマンドプロンプトから 「java Main」としてみたのですが、 Exception in thread "main" java.lang.NullPointerException at Main.get_graph_image( Main.java:139 ) at Main.set_random_costs( Main.java:211 ) at Main.init( Main.java:76 ) at Main.main( Main.java:25 ) というエラー表示がされてしまいました。 ソースコードをどのようにか、修正しなければならないのでしょうか? 以上、初歩的な質問かもしれませんが、 どなたか教えていただけないでしょうか? よろしくお願いします。

noname#173931
noname#173931
  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.1

ひまなので見てみます。 (1) repaint() の前にクラスやオブジェクトが指定されてないので、 この行があるメソッド set_random_costs() が属するクラス Main の repaint() が呼ばれています。 Main は Applet を継承しているので、Applet の repaint() が呼ばれるわけです。 このソースコードの中に定義は書いてありません。 インスタンスで言うと main() の中で生成されている main というオブジェクトの repaint() です。 (2) Mainはアプレットなので <html> <body> <applet code="Main.class" width="400" height="400"></applet> </body> </html> という内容のファイルを main.html という名前で保存して appletviewer main.html とすればそのまま実行できました。 java Main で実行したい場合は、エラーの出る139行の直前の1行 Image image = createImage(300, 130); を Image image = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().createCompatibleImage(300, 130); に変えたら動きました。 もっといい方法もあるかもしれませんが。

noname#173931
質問者

お礼

さっそく回答していただきありがとうございます。 ところで、 (2)については、ドキュメントをみながら、教えていただいた コードを試させていただきますが、 (1)について、 paint() を オーバーライドしていない Main クラスの repaint() というのはどういう動作をするのでしょうか。 もしよければ教えていただけないでしょうか? とにかく、貴重な時間を割いての回答、ありがとうございました。

その他の回答 (1)

  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.2

> paint() を オーバーライドしていない Main クラスの > repaint() というのはどういう動作をするのでしょうか。 するどいですね。この行なくても動くようです。 実際に作画をしているのは panel (ConsolePanel) なので、 panel.repaint() さえ実行していれば十分です。 これはあちこちで呼ばれてますね。

noname#173931
質問者

お礼

わざわざすぐにレスポンスを下さりありがとうございます。 そうですか。なくても動くのですか。 貴重な時間を割いての回答、ありがとうございました。

関連するQ&A

  • JavaのJARファイルがうまく作成できません

    Javaプログラムを作成したのですが、Jarファイルがうまく作成できません。 (Javaプログラムの作成経験はありますが、Jarファイル作成は初めてです) どなたか解決方法をご教授下さい。 4つのソースプログラムがあります。 1) D:\Java\x\y\Random\a.java 2) D:\Java\x\y\Random\b.java 3) D:\Java\x\y\Random\c.java 4) D:\Java\x\y\Random\d.java ■1:Windowsのコマンドプロンプトで、 cd D:\Java javac x\y\Random\*.java と入力して、エラーが発生する事なく、コンパイルできました。 (D:\Java\x\y\Randomフォルダに、a.class, b.class, c.class, d.classファイルができました) ■2:次に(Windowsのコマンドプロンプトで) java x.y.Random.myClass と入力して、期待通り動作しました。 上記1)~4)のjavaソースプログラムは次のようにコーディングしています。 1) a.java package x.y.Random; ・・・ class myClass { public static void main(String args[]) { ・・・ } } 2) b.java package x.y.Random; ・・・ 3) c.java package x.y.Random; ・・・ 4) d.java package x.y.Random; ・・・ ここまではうまく行っており、問題ありません。 ■3: 次のコマンドを実行すると、 jar cvf x.y.Random.jar x\y\Random 何もエラーは発生せず、以下のようなメッセージが10行程度表示され、 ・・・を追加中です。(入=xx)(出=yy)(nn%収縮されました) 「x.y.RandomNum.jar」ファイルが作成されましたが、 このjarファイルをダブルクリックすると、以下のダイアログボックスが表示されます。 ・ダイアログボックスのタイトル Java Virtual Machine Launcher ・エラーメッセージ Failed to load Main-Class manifest attribute from D:\Java\x.y.Random.jar 宜しくお願い致します。

    • ベストアンサー
    • Java
  • ソースコードのmain()がないんです

    「セールスマン巡回問題」のソースコードをhttp://www.infonet.co.jp/ueyama/ip/java_source.html で見つけました。それは良かったのですが、肝心のmain()が見つかりません。 よって実行ができません。どのようにmain()を書けばよいのでしょうか? 適当に↓のようにやってみましたが動きません。Appletを動かさないといけないようですがどうやれば…。 public static void main(String[] args) { salesman salesman = new salesman(); // (new salesman()).init(); (new salesman()).calc_len(); } ちなみにここのhtmlではソースコードは途中で途切れていますが 下のURLでダウンロードソフトを使って落とせば完全なのが得られるはずです。(って激しく面倒ですね…_| ̄|○) http://www.infonet.co.jp/ueyama/ip/java/salesman.java よろしくお願いします。m(__)m

    • ベストアンサー
    • Java
  • コンパイルできません

    JAVAを勉強して3日です。 インストール・環境設定を行いましたが、コマンドでコンパイルできません。 すみません、教えてください。 コマンドプロンプトからファイルのあるフォルダへ移動し、javac HelloWorld.java を実行しました。 エラー内容は以下のとおりです。 java.lang.NullPointerException at java.util.Hashtable.put(Compiled Code) at java.util.zip.ZipFile.readCEN(Compiled Code) at java.util.zip.ZipFile.<init>(ZipFile.java:61) at java.util.zip.ZipFile.<init>(ZipFile.java:71) at sun.tools.java.ClassPath.<init>(Compiled Code) at sun.tools.javac.Main.compile(Compiled Code) at sun.tools.javac.Main.main(Main.java:465) 宜しくお願いします。

    • ベストアンサー
    • Java
  • java ネットワークの本について

    こんにちは。 趣味でプログラミングをしているものです。 さっそくですが質問させていただきます。 まずは以下のURLから3ばんめのリンク先を 見ていただきたいのですが... http://www.eonet.ne.jp/~mycabinet 「基礎からわかる TCP/IP Javaネットワークプログラミング」 の第2版の105ページに記載されている、内容をもとに コマンドプロンプトを2つ起動し、 Socket と ServerSocket で 時刻を送信、受信するプログラムを動かしてみたのですが、 要請を受けて時刻を教える側から 例外を発生させて 終了してしまいました。 スタックトレースは次のようなものです。 java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) -(1) at java.net.SocketOutputStream.socketWrite(Unknown source) -(2) at java.net.SocketOutputStream.write(Unknown source) -(3) at Netclock.start(Netclock.java:58) at Netclock.main(Netclock.java:83) このうち(1),(2),(3)のSocketOutputStream というのは 「JavaTM Platform, Standard Edition 6 API 仕様」 に載っていなかったのですが、 このAPIには含まれていないクラス、ということでしょうか? (2),(3)のUnknown source についてインターネットでみてみたところ、 デバッグ情報としての行番号などを削除している、というような 記述を見かけたのですが、意味はよくわからないのですが、 APIにこれらのクラス、メソッドはあるということでしょうか? ご存知の方、教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • javaに詳しい方に質問です

    javaに詳しい方に質問です 私が使っているパソコンはwindowXPで今BG.java , BG.html の2つのファイルがあります ブロック崩しのソースです コマンドプロンプト上で下記のように操作をしたら、(画面の貼り方がわからなく申し訳ありません) C:\j2sdk1.4.2_05\bin>javac BG.java C:\j2sdk1.4.2_05\bin>appletviewer BG.html Exception in thread "main" java.util.MissingResourceException: Can't find resour ce for bundle sun.applet.resources.MsgAppletViewer, key appletpanel.badattribute .exception at java.util.ResourceBundle.getObject(ResourceBundle.java:314) at java.util.ResourceBundle.getObject(ResourceBundle.java:311) at java.util.ResourceBundle.getString(ResourceBundle.java:274) at sun.applet.AppletMessageHandler.getMessage(AppletMessageHandler.java: 39) at sun.applet.AppletPanel.showAppletStatus(AppletPanel.java:755) at sun.applet.AppletPanel.init(AppletPanel.java:190) at sun.applet.AppletViewer.<init>(AppletViewer.java:177) at sun.applet.StdAppletViewerFactory.createAppletViewer(AppletViewer.jav a:82) at sun.applet.AppletViewer.parse(AppletViewer.java:1122) at sun.applet.AppletViewer.parse(AppletViewer.java:1056) at sun.applet.Main.run(Main.java:138) at sun.applet.Main.main(Main.java:80) というなんだかよくわからない表示がされて実行がされませんでした 本当ならプログラムを張り付けたかったのですが、文字数に制限があるし ダウンロード先を忘れてしまいまして… ということなので詳しいことは構わないので、この表示が何を表しているのか ご回答お願いします

    • ベストアンサー
    • Java
  • SunのJavaからMSのJavaにしかないクラスを利用したい

    初めて投稿させていただきます。 私は、EXEを作れる、DLLに触れるというメリットでMicrosoft SDK for Java 4.0を使っていたのですが、2007年にMicrosoftが完全にサポートを打ち切ってしまうことからSunのJDKに開発環境を移行しようと考えています。 そこで、MSが提供していた独自クラスをSunのJavaで使えないかと思って調べています。 具体的にはまず、MS Javaで使われているクラスファイルを吐き出すためにコマンドプロンプトで > clspack /auto として、classes.zipを作成しました。これをSunのJavaをコンパイルするときに > javac -cp C:?WINDOWS?Java?Classes?classes.zip hoge.java > javac -Xbootclasspath C:?WINDOWS?Java?Classes?classes.zip hoge.java とすると、コンパイルは通るのですが、 > java hoge > java -cp C:?WINDOWS?Java?Classes?classes.zip hoge > java -Xbootclasspath C:?WINDOWS?Java?Classes?classes.zip hoge 等として、実行しようとすると次のようなエラーが表示されてしまいます。 Exception in thread "main" java.lang.NoClassDefFoundError: com/ms/win32/User32 at hoge.main(hoge.java:4) Exception in thread "main" java.lang.NoClassDefFoundError: hoge Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/security/ProtectionDomain ちなみに、hoge.javaはMSのクラスが使えるかを確認するために作ったサンプルです。ソースコードは以下のような内容です。 import com.ms.win32.*; class hoge{  public static void main(String[] args){   User32.MessageBox(0,"Hello.","Java!!",0);  } } MSの提供しているクラスを使うことは出来ないのでしょうか?また、MS以外のものでデバイスにアクセスすることを可能にするクラスは提供されていないでしょうか?

  • Javaでのエラーについて

    Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '.' at java.util.Formatter.checkText(Unknown Source) at java.util.Formatter.parse(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.io.PrintStream.format(Unknown Source) at java.io.PrintStream.printf(Unknown Source) at ShininginSpace.main(ShininginSpace.java:33) と出てきたのですが、これはどういう意味ですか?

    • ベストアンサー
    • Java
  • JavaソースコードをコンパイルするJavaプログラム

    タイトルの通りですが、Javaソースコードをコンパイルし、実行するJavaプログラムを作りたいのですが、なにか有効な方法はありますでしょうか。 Runtime.getRuntime().exec( "javac Test.java" ); のようにすると、エラーになります。 なにか良い方法をご存知でしたら、よろしくお願いします。

    • ベストアンサー
    • Java
  • Java 3D Web Start のソースコード一例を教えてください

    私は、Java3Dでプログラムを作成しています。 作成したプログラムの実行結果を仲間に示したいのですが、多くの仲間はJavaJREについてはプレインストールパソコンを使っていますが、Java3Dはインストールしておらず見てもらうことができません。 先日、OKWave殿を通じてJavaWebStartの存在を知り、特に紹介されたJavaNetのJava 3D Web Start( https://j3d-webstart.dev.java.net/test/ )には、rotating cube、moving sphereなどいくつかの3Dサンプルが画面をクリックすると見ることができます。 ただし、いずれも jnlpファイルで紹介されていて、ソースコードは紹介されていません。 JavaWebStartは、プログラム(ソースコード)を作成後、classファイルをjarファイルにかためて、jnlpファイルと共にWebサーバにアップすることでプログラム実行結果を仲間にも見てもらえるようになりますが、私の認識ではSwingで書かれたアプリケーション、しかもjnlpファイルのapplication-desc 要素にはオプション属性 main-class を記載するため、ソースコードには、「public static void main(String argv[]) メソッドを含む、最初に実行されるクラス」の記載が必要になってくるかと思います。 Swingアプリケーションを扱う多くのサイトに紹介されているコンポーネント、レイアウトなどを示すサンプルソースコードは上の方法にて、JWSで表示させることができたのですが、3DをJavaNet社のサンプルのように表示させることができていません。 java3D Web Startで表す3Dの簡単モデル(できれば、回転アニメ、behaviorなど動きのあるもの)をソースコードとともに、またWebサーバにアップするまでの手順を教えていただきたいと存じます。

    • ベストアンサー
    • Java
  • JAVA実行時エラーについて教えてください

    JAVAを最近になって始めた初心者です。 コンパイルは問題なく終了するのですが、実行時に Exception in thread "main" java.lang.NoClassDefFoundError:HelloWorld(Unsupported major.minor version 49.0)    at java.lang.ClassLoader.defineClass0(Native Method)    at java.lang.ClassLoader.defineClass(Unknown Source) と表示されます。実際には at java.~ 以降にも複数行文字が表示されています。(全部で12行です) ソースファイル及びクラスファイルの格納先は c:\java\HelloWorld.java c:\java\HelloWorld.class ソースは以下の様に記述しました。 class HelloWorld { public static void main(String args[]) { System.out.println("HelloWorld"); } } 1)過去ログから“環境設定のクラスパス”及びコマンドプロンプトで “java -cp. HelloWorld”を確認しました。そうすると以下のようなメッセージが表示されます。 Unrecognized option: -cp. Could not create the Java virtual machine. 2)システム環境変数の“PATH”は以下のように記述しております。 ;C:\Program Files\Java\jdk1.5.0_07\bin 3)システム環境変数の“CLASSPATH”は指定しておりません。というより、指定しても現象は変わりませんでした。 ご教授願えないでしょうか。宜しくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう