• ベストアンサー

「java.lang.NullPointerException」というエラー

アプレットを作っているのですが、コマンドプロンプトからappletviewerで実行すると、うまく動くのに、ブラウザでhtmlに貼って動かそうとすると java.lang.NullPointerException というエラーが出て、動いてくれません…。 エラーが出ている部分は、 File[] imagelist; File image = new File("imagesyukusyo");//imagesyukusyoはディレクトリの名前。 imagelist = image.listFiles() int yousosu; yousosu = imagelist.length;//ここでエラーが出ている という部分です。アプレットとhtmlファイルと同じディレクトリにimagesyukusyoフォルダがあって、そのフォルダの中に、いくつか画像ファイルが入っています。 よろしくお願いします。

  • Java
  • 回答数5
  • ありがとう数5

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

  • ベストアンサー
  • shred
  • ベストアンサー率35% (25/70)
回答No.5

要はimageshukusho内の画像を変更してもアプレットを作り直さなくてもいい方法を模索しているのですよね。 appletタグの属性にパラメータを指定し、アプレットに渡すという行為も省きたいんですよね。 私だったら以下のようにするかもしれません。 phpなどによりimageshokusho内の画像の一覧を取得し、htmlに appletタグの属性にパラメータとしてファイル数とファイルを 動的に書き足す。 アプレットはファイル数がわかるので、この数だけファイルをパラメータ から取得する。 ローカル環境で学習中であるならばapache等のHTTPサーバとphpが必要となります。

nabewari
質問者

お礼

回答ありがとうございます。 >要はimageshukusho内の画像を変更してもアプレットを作り直さなくてもいい方法を模索しているのですよね。 appletタグの属性にパラメータを指定し、アプレットに渡すという行為も省きたいんですよね。 そうです。まさにそうなんです(笑)。 PHP、Apacheとの連携ですか…。全く考えもしませんでした。現在のサイトもパスワードなどつけるためにPHPを利用しようかと思っていたので(まだ、ほとんどPHPをやったことはありませんが)、PHPを利用するときに平行して勉強して、実現をはかろうと思います。 ですが、とりあえずは、仕方ないので妥協して、ファイル名を「順列の数字.jpg」にするとかして、ファイルの数をhtmlからパラメータで指定(というんでしょうか?)して実現しようと思います。

その他の回答 (4)

  • shred
  • ベストアンサー率35% (25/70)
回答No.4

>サーバー内のディレクトリを指定する方法というのは、別にあるんでしょうか? そもそもlistFilesはローカルファイルシステム上において 実現されるJavaAPIなので物理的に不可能です。 Applet#getImageでファイル取得して下さい。

nabewari
質問者

お礼

回答ありがとうございます。なるほど、こういうやり方では無理なのですね…。 (これもまた、別に質問を立てるべきなのかもしれませんが)listFilesのように、(getImageメソッドの第二引数目のように)ファイル名を指名しなくても、あるディレクトリの中のファイルを全て取得するようなやり方はあるでしょうか?もしよければよろしくお願いします。m(_ _)m

  • ARIA9
  • ベストアンサー率37% (3/8)
回答No.3

サーバ内のディレクトリというか、jarファイル内に含んでない画像ファイルをWebサーバから取得するのであればhttp接続で取得する必要があります。 ※HttpURLConnectionクラスあたりを参照 ところで、現状はclassを指定してアプレットを起動していますか? だとしたら、jarファイル内にimagesyukusyoを作って、画像ファイルを入れておいてアプレットをjarファイルから起動するようにしておけばFileクラスで読み込めるかもしれません。 ちょっと確認できる環境にないので、間違っていたら申し訳ございません。

nabewari
質問者

お礼

回答ありがとうございます。 jarファイルを作って、その中にディレクトリとファイルをセットで入れてみたのですが、実行できませんでした…。 やはり無理のようですね……。

  • shred
  • ベストアンサー率35% (25/70)
回答No.2

imagelistがnull、つまりオブジェクトを参照していない状態で lengthメソッドを呼び出そうとしているのがエラーだと思います。 これ↓に原因があるのでは? File image = new File("imagesyukusyo"); サーバー内のディレクトリを指定しているつもりだと思いますが ローカルのディレクトリを指定していると思います。 アプレットビューワーであればローカルのディスクを読み出すことは可能ですがインターネットから取得するアプレットはセキュリティのためにローカルのディスクは読み書き出来ません。

nabewari
質問者

お礼

回答ありがとうございます。 >サーバー内のディレクトリを指定しているつもりだと思いますが ローカルのディレクトリを指定していると思います。 そうなのですね…。完全にサーバー内のディレクトリを指定しているつもりでした。「imagesyukusyo」は一応アプレットが入っているディレクトリにあるディレクトリの名前なのですが… サーバー内のディレクトリを指定する方法というのは、別にあるんでしょうか?(これはまた別に質問をしたほうがいいんでしょうか?)

  • maoo2022
  • ベストアンサー率59% (110/185)
回答No.1
nabewari
質問者

お礼

回答ありがとうございます。 まだちょっと私の知識不足のせいで、解決にはならなさそうです…

関連するQ&A

  • NullPointerExceptionが出てしまいます

    NullPointerExceptionが出てしまいます アプレットでブロック崩しを作っているのですが、appletviewerで実行したところ、 java.lang.NullPointerException     at ファイル名.run(ファイル名.java;366) at java.lang.Thread.run(Thread.java;534) と表示され、ブロック崩しが動きません。 エラーの出ている部分は、 //あたり判定 if(a>=x-20&&a<=x+80&&b>=y-15&&b<=y+10);{ flag02=false; score=seikou+1; mySound02.play(); } のmySoundの部分です。 このコードはランクラスの中に入れています。 MySoundを消すと動きますが変な動きになってしまいます。 説明下手ですが、教えてくださるとうれしいです。

    • ベストアンサー
    • Java
  • java.lang.OutOfMemoryErrorというエラーがでる。

    javaを勉強しています。タイトルのように java.lang.OutOfMemoryErrorというエラーが出てしまいます。少し調べてみたらどうやらメモリーの使いすぎ(?)のようなのですが、プログラムの方に問題があるのでしょうか?それとも使えるメモリーを増やすといった解決策を取ったほうがいいのでしょうか? よろしくお願いします。プログラムはまず画像が表示されて、左クリックすると次の画像へ変わる、といった処理をするアプレットです。 package jibundesukosidutu; import java.applet.Applet; import java.awt.Graphics; import java.awt.MediaTracker; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class Main extends Applet implements MouseListener{ File[] imagelist; File image = new File("image"); BufferedImage drawImage; static int i = 0; MediaTracker mt = new MediaTracker(this); public void init(){ imagelist = image.listFiles();//ディレクトリの画像ファイルたちを配列に入れていく。 addMouseListener(this); try { drawImage = ImageIO.read(imagelist[i]);//drawImageメソッドで画像ファイルとして引数を取れるように、型変換しておく。 } catch (IOException e) { e.printStackTrace(); } } public void paint(Graphics g){//drawImageファイルを表示するだけ int w, h; w = getSize().width; h = getSize().height; mt.addImage(drawImage,0); try { mt.waitForID(0); } catch (InterruptedException e) { e.printStackTrace(); } g.drawImage(drawImage,0,0,w,h,this);//imagelist[0]を表示したい。 } public void mouseClicked(MouseEvent e) { int btn = e.getButton(); if(btn == MouseEvent.BUTTON1){//左クリック=進め System.out.println("左クリック"); i++; //searchFile(true); try { drawImage = ImageIO.read(imagelist[i]); } catch (IOException e1) { e1.printStackTrace(); } repaint(); }else if(btn == MouseEvent.BUTTON2){ System.out.println("右クリック"); //searchFile(false); } } public void searchFile(boolean next){ //next→次の画像、false→前の画像 } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } }

    • ベストアンサー
    • Java
  • firefox2.0 JAVAエラーが出ます

    JAVA(アプレット?)を使用したページを表示しようとするとエラーが出て止まってしまいます。そのときに出るエラーの文は java.lang.NullPointerException Javaコンソールを開くと Java Plug-in 1.6.0_03 使用中の JRE のバージョン 1.6.0_03 Java HotSpot(TM) Client VM ユーザのホームディレクトリ = C:\Documents and Settings\Administ java.lang.NullPointerException at com.sun.deploy.net.proxy.DynamicProxyManager.reset(Unknown Source) at com.sun.deploy.net.proxy.DeployProxySelector.reset(Unknown Source) at sun.plugin.AppletViewer.initEnvironment(Unknown Source) と出ます。何度再インストールしても治りません。どうにかなりませんか?

  • NullPointerExceptionの件

    あるフォルダからファイルのみを取得する処理です。 うまく動くときもあるのですがたまに←の部分でNullPointerExceptionエラーが起こります。 わかる方は教えてください。 public static String[] ExtractFile(String s[],String Folder){//フォルダからファイルのみを抽出 String umeBackup[]; File f = new File( Folder ); System.out.println("2:" + f.getAbsolutePath()); String files[] = f.list(); int N = files.length; ←←←←← int k; String FileName; for( k=0; k<N; k++ ){ FileName = Folder + "/" + files[k]; File file = new File( FileName ); if( file.isFile() ){ umeBackup = s; s = new String[s.length + 1]; System.arraycopy(umeBackup, 0, s, 0, umeBackup.length); umeBackup = null; s[s.length - 1] =files[k]; } } System.out.println(s.length); f = null; return s; }

  • javaでコンパイルが出来ない

    java勉強中の初心者です。 カレントディレクトリのファイルを一覧表示するプログラムを作ろうと思い、下のようなコードを書いたのですが、 「構文解析中にファイルの終わりに移りました」というエラーが出ます。 何度か見直したんですが、コードが間違っているのか、どこか別に問題があるのかわかりません。 教えてください。よろしくお願いします。 ________________________________________________________________ import java.io.File; public class ListFiles { public static void main(String[] args) { ListFiles listFiles = new ListFiles(); listFiles.execute(); } private void execute() { File currentDir = new File("."); File[] files=currentDir.listFiles(); for (File file : files) { String fileName = file.getName(); String kind; if (file.isDirectory()) { kind="DIR "; }else{ kind="FILE"; } System.out.printf("%s %s%n", kind, fileName); } }

  • アプレット

    HelloWorldと挨拶するアプレットを作っています。Cドライブ内にjavaというフォルダを作り、その中に、ソースファイルを作り、コンパイルをしました。そしてHTMLファイルも作りました。そしてアプレットを「appletviewer」を使って見たいので、プロンプトから「C:\java>appletviewer Hello.html」というコマンドを入力しました。しかし、「内部コマンドまたは外部コマンド、操作可能なプログラムまたはパッチファイルとして認識されていません」と出てしまいます。参考書の通り行ったのですが、間違っているのでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JDBCのエラー

    JDBCについてですが、javaファイルをコマンドプロンプトでコンパイルすると通るのですが、実行しようとすると ERROR:class not found java.lang.ClassNotFoundException: org.postgresql.Driver ERROR:no connection java.sql.SQLException: No suitable driver ERROR:DB Output java.lang.NullPointerException ERROR:DB close error java.lang.NullPointerException とエラーが出てしまいます。過去の質問も見ましたしググってみて同じような質問も見たつもりですが、クラスパスがどうだとかいう話がぜんぜんわかりません。 別のパソコンでやったときは実行できたので、いろいろ自分で調べたところ、ドライバ(?)の問題かなという風に漠然と思っているのですがよくわかりません。 なにか考えられる原因と、その解決法をわかる方いらっしゃいましたら教えてください。お願いします。

  • ファイル管理ツールを作りたいのですが

    ファイル管理ツールを作る際に、ディレクトリ内のファイル名を取得し、それをアプレット画面のテキストエリアに表示させたいのですが全くやり方がわかりません。 初心者なりに頑張って作ってみたのですが、 import java.io.File; public class Filekanri{ public static void main(String args[]){ File dir = new File("C:\\MyDir"); File[] files = dir.listFiles(); // 全ファイルの名前を取得 String fnames[] = new String[files.length]; for( int i = 0; i < files.length; i++ ) { fnames[i] = files[i].getName(); } これで良いのでしょうか?このあとどうすれば良いのかどうかどうか教えてください。宜しくお願いします。

  • javaのファイル読み込み処理の質問です

    あるディレクトリから.txtファイルを検索し 検索して出た結果を1つずつ読み込んでいきたいです どのようにしたらよいのでしょうか? private static String path="C:\\textfolder "; public static voif main(String[] args) { File dir = new File(path); File[] files = dir.listFiles(); String fileName = dir.getName(); for (int s = 0; s < files.length; s++) { try {//ファイルオープン BufferedReader br = new BufferedReader(new FileReader(fileName)); } } catch (IOException e) { e.printStackTrace(); } } return; } } 現状はこのような感じになっています pathの中身はディレクトリのパスを指定しています。 ディレクトリはC:\textfolder でtextfolderというフォルダに.txt(拡張子)のファイルが複数あったとします。

    • ベストアンサー
    • Java
  • javaで質問です。

    java初心者です。 unix系のコマンドでfindコマンドの動作と同じ動作をするプログラミングを教えて頂きたいです。 実行の際に、同時に引数としてディレクトリを渡すとそのディレクトリ以下のファイルが全て一覧表示されるというものです。 どうしても下記のコードから進まないです。 特にわからない部分は ・7行目の配列の確保にどのような引数を渡せばいいのか。 ・繰り返し処理の中で、ディレクトリかどうかの条件文で更に下位層をチェックしていきたいが、下位層にいかない。 ・16行目のcでチェックしている箇所が配列のどの部分なのかを引数で渡してそこにコピーたいのですが、9行目のint c;で何を渡せばいいのか分からない。 ・11行目の条件の4の部分も何を渡せばいいのかわからない。 です。 どうかご教授いただきますようお願いします。 1 import java.io.File; 2 import java.util.Arrays; 3 4 public class Find { 5 public static void main(String[] args) { 6 File findFile = new File(args[0]); 7 File names[] = new File[15] ; 8 names[0] = findFile; 9 int c = 0; 10 11 for (int i = 0; i < 4; i++) { 12 names[i] = findFile; 13 if (names[i].isDirectory()) { 14 File subfiles[] = names[i].listFiles(); 15 names[i] = subfiles[i]; 16 System.arraycopy(names, i, names, (i + c), subfiles.length); 17 } 18 } 19 for (int k = 0; k < names.length; k++) { 20 System.out.println(names[k]); 21 } 22 } 23 }

専門家に質問してみよう