- ベストアンサー
実行画面で表示されるエラーのことなんですが
java.lang.NoSuchMethodError: main Exception in thread "main" と表示されます。どうすればよいでしょうか?自分としてはテキスト ファイルの読み込みあたりがおかしいのかなと思うのですが、このエラーをぐぐったら指定したクラスの中にmainメソッドが含まれていないと 書いてあってよくわからないです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
私の環境では実行できました。 実行コマンドはどう打っていますか? >java ServerMain と実行されていますでしょうか? あと、パッケージなどは利用されていますか?
その他の回答 (4)
- watuki
- ベストアンサー率75% (3/4)
例外から察するにmain.javaというファイル名でしょうか。 main.java --- public class main { public static void main(String[] args){ // ※ System.out.println("Hello world!"); } } 質問にあるエラーは↑みたいに書かれているはずが、 ※の行がないために出ているエラーです。 ※の行のメソッドを定義してあげれば動くと思われます。 (インデントを全角空白でやってるので、コピペする際には気をつけて下さい)
- pcbeginner
- ベストアンサー率46% (261/560)
・タイプミスはありませんか? ・クラスパス上に「mainメソッドのない」同名のクラスあり、クラスパスにそっちが先に記述されていたりしませんか?
- kscKane
- ベストアンサー率62% (18/29)
実行しようとしているクラスに対して、クラスパスが通っていない場合、 また、mainメソッドの書き方が間違っている場合が考えられます。 クラスパスの設定をしているなら、それを確認してください。 正しいと思われる/設定していないなら、ソースをご提示いただけるとなんだか原因が分かるかもしれません。
補足
ご回答ありがとうございます。 なにしろ、javaやったことないのにいきなり卒論でクラサバのプログラム作れといわれたもので(汗) プログラムのせるのでよろしくお願いします。 class Server extends Thread{ private Socket client; private String ans; private int ans2; private String str; private int str2; private int number; private int ritu; private String name; public Server(Socket i,int n){ client = i; number = n; } public void run(){ try{ int a,n,t,s; int ritu; int ans2; int amari=0; int rand[]={0,1,2,3,4,5,6,7,8,9}; t=s=n=ritu= 0; ans2=0; Random ran = new Random(); ran.setSeed(System.currentTimeMillis()); for(int wh = 9;wh >1;wh--){ s = ran.nextInt(9); t = rand[wh]; rand[wh] = rand[s]; rand[s] = t; } InputStreamReader fisr = new InputStreamReader(client. getInputStream()); BufferedReader fin = new BufferedReader(fisr); String name = fin.readLine(); System.out.println(name); while(n!=10){ FileInputStream objFis = new FileInputStream("eitango"+rand[n]+".txt"); InputStreamReader objlsr = new InputStreamReader(objFis,"Shift_jis"); BufferedReader objBr = new BufferedReader(objlsr); PrintWriter out = new PrintWriter(client.getOutputStream(),true); //1行ずつファイルを読み込む if (n==0){ out.println("Hello,clientNo:" + number +"\n"); } for(a=0;a!=6;a++){ if(a==5){ String ans = objBr.readLine(); ans2 = ans.length(); System.out.println("ans2 = "+ans2); } if(a!=5){ out.println(objBr.readLine()); } } InputStreamReader isr = new InputStreamReader(client.getInputStream()); BufferedReader in = new BufferedReader(isr); String str = in.readLine(); int str2 = str.length(); System.out.println("str2="+str2); System.out.println("ans2="+ans2); if(str2==ans2){ ritu++; }else{ System.out.println("×"); } System.out.println("正解数:"+ritu); n++; } PrintWriter out2 = new PrintWriter(client.getOutputStream(),true); out2.println("おつかれさまでした\n"); while(amari!=6){ out2.println(""); amari++; } FileOutputStream objF = new FileOutputStream("seiseki.txt",true); OutputStreamWriter objO = new OutputStreamWriter(objF); BufferedWriter objB = new BufferedWriter(objO); objB.newLine(); objB.close(); out2.println("clientNo:"+number+"さんは10問中"); out2.println(ritu); out2.println("問正解です。"); client.close(); }catch (FileNotFoundException e){ e.printStackTrace(); }catch(UnsupportedEncodingException e){ e.printStackTrace(); }catch (IOException e){ System.err.println("エラーが発生しました:" + e); } } } class ServerMain{ public static void main(String[] args){ int n=1; try{ ServerSocket server = new ServerSocket(1000); while (true){ Socket client = server.accept(); System.out.println("accept client No."+ n); new Server(client, n).start(); n++; } }catch(Exception e){ System.out.println("エラーが発生しました:" + e); } } }
- pcbeginner
- ベストアンサー率46% (261/560)
おそらく java Hoge として実行していると思います。 java Hoge を実行すると、HogeクラスのmainメソッドがJavaから呼ばれて実行されます。 Hoge.javaの中に public static void main(String[] args) というmainメソッドはありますか? 表示されてるエラーは 「(mainってメソッドを呼んだけど)mainなんてメソッドが見つからないよ。」 って意味です。 参考にしている本や、サイトなどがありましたら、もう1度最初から熟読しましょう。
補足
ご回答ありがとうございます。 ですがmainメソッドがあるのにこのエラー文が表示されます。これは何がおかしいのでしょうか?
お礼
今まで >java Server とやっていましたが、ご指摘の通りにやったところできました。 ありがとうございました。