• 締切済み

eclipseで以下のようなプログラムを書いて、それをjar形式でエクスポートしました。

eclipseで以下のようなプログラムを書いて、それをjar形式でエクスポートしました。 しかし、そのjarファイルをクリックして開こうとすると「could not find main class」と出てききます。どうすればいいのでしょうか public class GameTestMain { /** * @param args */ JFrame frame1; BufferStrategy bstrategy; int count = 0; BufferedImage backimage1, backimage2; GameTestMain() { frame1 = new JFrame("ノベルゲーム"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(600 + insets.left + insets.right, 400 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null); frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); try { backimage1 = ImageIO.read(getClass().getResource("img1.jpg")); backimage2 = ImageIO.read(getClass().getResource("img2.jpg")); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } Timer t = new Timer(); t.schedule(new MyTimerTask(), 10, 500); } public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ GameTestMain gtm = new GameTestMain(); } class MyTimerTask extends TimerTask { public void run() { Graphics g = bstrategy.getDrawGraphics(); if (bstrategy.contentsLost() == false) { Insets insets = frame1.getInsets(); g.translate(insets.left, insets.top); g.drawImage(backimage1, 0, 0, frame1); g.setFont(new Font("Selif", Font.PLAIN, 40)); drawStringCenter("秒速1キロメートル", 100, g); bstrategy.show(); g.dispose(); } } } void drawStringCenter(String str, int y,Graphics g) { int fw = frame1.getWidth() / 2; FontMetrics fm = g.getFontMetrics(); int strw = fm.stringWidth(str) / 2; g.drawString(str, fw-strw, y); } }

みんなの回答

  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.2

Eclipseで、Jarファイルを作成する場合には、基本的にマニフェストファイル仕様を 全く意識しなくてもその作成が可能になっています。 >「could not find main class」 これは、mainメソッドの位置を設定していないためだと思われます。 JARエクスポートの4番目の画面”JARマニフェスト仕様”の画面の最下部、  アプリケーションのエントリー・ポイントのクラスを指定  メイン・クラス のテキストフィールドに、明示的にmainメソッドの位置を指定する必要があります。 クラスファイルが1つしかない、メインメソッドはプロジェクト内に1つしかない 等に関係なく、指定しないと起動ファイルは作成できません。 MSのC#等のIDEだと、アプリケーションを作成する場合、何も考えずにボタンを 押していけば、基本的なフレームの生成からインストーラ(setup.exe)まで、 全自動で生成してくれますが... 考え方の違いで、Eclipseでは、ユーザが指定しない限り何も作成されません。 ソフトウェア開発に慣れた人にとっては、勝手なことをしない、Eclipseの方が 好まれるという意味もあるでしょう。 初心者の人にとっては、Javaの開発環境はちょっとしきいが高いです。 もう少し、初心者の気持ちを汲んであげても良い気はしますが。 でもそこを乗り切れば、断然快適になります。

全文を見る
すると、全ての回答が全文表示されます。
  • auty
  • ベストアンサー率58% (284/486)
回答No.1

jarファイルを実行するには、マニフェストファイルを利用してそのjarファイルを作成しておく必要があります。 >>> jarファイルをクリックして開こうとする これは、「jarファイルの実行」を意味するのでしょうか。ecipseで作成するには、 以下のページを参考にしてみてください。 http://www.ipe.tsukuba.ac.jp/~endo/JARfile.pdf 一般知識とコマンドプロンプトで作成するには、 http://www.fk.urban.ne.jp/home/kishida/kouza/old/javajar.html http://www.ne.jp/asahi/hishidama/home/tech/java/jar.html また、ファイルの関連付けは、Windowsのバージョンにもよると思いますが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1622577 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24020&forum=12&2 を参考にしてください。

noname#85870
質問者

お礼

回答ありがとうございます。 早速参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字制限節約のためimportは省きます

    文字制限節約のためimportは省きます public class MojiTest0621p2 { JFrame frame1; BufferStrategy bstrategy; int count =0; MojiTest0621p2(){     frame1=new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(600 + insets.left + insets.right,400 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null);          frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); Timer t=new Timer(); t.schedule(new MyTimerTask(),10,500); } public static void main(String args[]){ MojiTest0621p2 gtm =new MojiTest0621p2(); } class MyTimerTask extends TimerTask{ @Override public void run() { Graphics g=bstrategy.getDrawGraphics(); if(bstrategy.contentsLost()==false){ Insets insets=frame1.getInsets(); g.translate(insets.left,insets.top);//左上 文字は別 g.setColor(Color.BLUE); String sa = "Hello、Worldハローワールド"; // 文字列saを生成 String sb = "えんがち"; // 文字列sbを生成 String sc = "あつい"; // 文字列scを生成 int gyo1=0; int gyo2=0; int gyo3=0; String str1="Hello、Worldハローワールド"; String str2="えんがち"; g.setFont(new Font("SansSerif",Font.BOLD,20)); for(gyo1=1;gyo1<=sa.length();gyo1++){ String s1 = sa.substring(0 , gyo1); // 1文字目からi文字目を取得 g.drawString(s1, 100, 100); } if(str1.equals(sa)==true){ for(gyo2=1;gyo2<=sb.length();gyo2++){ String s2 = sb.substring(0 , gyo2); // 1文字目からi文字目を取得 g.drawString(s2, 100, 150); } } (str2.equals(sb)==true){ for(gyo3=1;gyo3<=sc.length();gyo3++){ String s3 = sc.substring(0 , gyo3); g.drawString(s3, 100, 200); } } bstrategy.show();} g.dispose(); } } } javaの質問です ノベルゲームのTimerTaskでオートモードを作りたいのですがうまく作れません。 Hello、Worldハローワールドを一文字ずつ毎秒ごとに描画し、読み終わったら えんがちを一文字ずつ描画するというプログラムを組みたいです。 上記のプログラムをベースに(でもいくらでも変えていいですよ)改善箇所、修復箇所を お願いします

    • ベストアンサー
    • Java
  • javaでのコンテントペインの使い方についてです

    public class GameTestMain { JFrame frame1; BufferStrategy bstrategy; int count = 0; GameTestMain(){ frame1 = new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(600 + insets.left + insets.right, 400 + insets.top + insets.bottom); frame1.setResizable(false); frame1.setLocationRelativeTo(null); Container pane = frame1.getContentPane(); pane.setBackground(Color.WHITE); frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); Timer t = new Timer(); t.schedule(new MyTimerTask(), 0, 500); } public static void main(String[] args) { GameTestMain gtm = new GameTestMain(); } class MyTimerTask extends TimerTask{ public void run () { Graphics g = bstrategy.getDrawGraphics(); if (bstrategy.contentsLost()==false){ Insets insets = frame1.getInsets(); g.translate(insets.left, insets.top); g.setColor(Color.BLUE); g.fillRect(0, 0, 100, 100); bstrategy.show(); g.dispose(); } } } } (文字数の関係でimport文は省略) 四角形を表示させる部分を追記したところ、背景が白でなくなってしまいました。 以前、Jframeに直接描写するのではなく、コンテントペインという透明レイヤーのインスタンスを取得し、そこに色々と表示させていくということを耳にしました。 背景を白にしたのが反映されないのは、四角形をコンテントペインのインスタンスでなくframe1に直接表示させているからではないかと思うのですが、背景の時に作製した「pane」とは別に新しくコンテントペインのインスタンスを取得し、そこに描写するのがいいでしょうか? どちらにしてもコンテントペインのインスタンスに四角形を描写する方法がわかりません。 背景の部分についてはネットで同じような質問をされている方がいたので、 その回答を元に記入しました。 今読んでいる入門本、「JAVAわくわくゲームプログラミング教室」だとコンテントペインなしで解説されているのですが、せっかくなのでコンテントペインも同時に導入しながら進めたいです。 これからこの本で簡単なゲームを作成するところまでやっていきますので、 コンテントペインの大まかな仕組みや使い方を理解していなければ同じように躓くと思います。 なので、今この場を切り抜ける方法も教えて欲しいのですが、コンテントペインの使い方がわかる書籍なども知っている方がいれば教えていただけないでしょうか。 よろしくお願いします。

  • javaの質問ですdrawStringを使いゲームのオートモードの文字

    javaの質問ですdrawStringを使いゲームのオートモードの文字を描写しているのですが、そのオートモードに描画される文字とふり仮名を同じタイミングで描写するプログラムを打ちたいのですがどうすればよろしいでしょうか? できればループを抜ける方法もお願いします。初心者質問ですみません。 import javax.swing.*; import java.awt.*; import java.awt.image.*; import java.util.*; public class test0725 { JFrame frame1; BufferStrategy bstrategy; test0725(){ frame1=new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(800 + insets.left + insets.right,600 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null); frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); java.util.Timer t=new java.util.Timer(); t.schedule(new MyTimerTask(),10,50); } public static void main(String args[]){ test0725 gtm =new test0725(); } class MyTimerTask extends TimerTask{ int line = 0; int position = 0; String[] messages = { "Hello新着メッセージなしを読む", "aaa", "年収7000万円の米市職員退職" }; @Override public void run() { Graphics g = bstrategy.getDrawGraphics(); if(bstrategy.contentsLost()==false){ Insets insets = frame1.getInsets(); g.clearRect(insets.left,insets.top,insets.right - insets.left,insets.bottom - insets.top); g.translate(insets.left,insets.top); g.setColor(Color.BLUE); g.setFont(new Font("MS ゴシック",Font.BOLD,24)); for(int i = 0;i < line ;i++){ //g.drawString(messages[i], 200,500 + 40 * i); } System.out.println(messages[line].substring(0,position)); g.drawString(messages[line].substring(0,position), 200,500 + 40 * line); if(line==2){ line=0; } if(line==1){ g.drawString("ありがとう", 50, 50); } if(position < messages[line].length()){ position += 1; }else if(line == messages.length - 1){ }else{ position = 0; line += 1; } } bstrategy.show(); g.dispose(); } } }

  • index0920さん

    index0920さん javaの質問です なぜ以下のプログラムがループするのかがわかりません 文字列を全文出し切った時点でとめたいのですがどうすればいいでしょうか? 方法と解説をおねがいします。 import javax.swing.*; import java.awt.*; import java.awt.image.*; import java.util.*; import java.util.concurrent.TimeUnit; public class MojiTest0730 { JFrame frame1; BufferStrategy bstrategy; MojiTest0730(){ frame1=new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(800 + insets.left + insets.right,600 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null); frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); java.util.Timer t=new java.util.Timer(); t.schedule(new MyTimerTask(),30,150); } public static void main(String args[]){ MojiTest0730 gtm =new MojiTest0730(); } class MyTimerTask extends TimerTask{ int line = 0; int position = 0; String[] messages = { "Hello、Worldハローワールド", "aaa", "年収7000万円 の米市職員退職"}; @Override public void run() { Graphics g = bstrategy.getDrawGraphics(); if(bstrategy.contentsLost()==false){ Insets insets = frame1.getInsets(); g.clearRect(insets.left,insets.top,insets.right - insets.left,insets.bottom - insets.top); g.translate(insets.left,insets.top); g.setColor(Color.BLUE); g.setFont(new Font("MS ゴシック",Font.BOLD,24)); g.drawString(messages[line].substring(0,position), 200,500 + 40 * line); System.out.println(messages[line].substring(0,position)); if((line==2) && (position==2)){ g.setFont(new Font("MS ゴシック",Font.BOLD,12)); //g.drawString(messages2[line].substring(0,position), 200,500 + 40 * line); g.drawString("ねん", 200, 560); } if(position < messages[line].length()){ position += 1; }else if(line == messages.length - 1){ position += 1; }else{ position = 0; line += 1; } } bstrategy.show(); g.dispose(); } }

    • ベストアンサー
    • Java
  • javaの質問です ボタンを右、左クリックすることでswitch文を切

    javaの質問です ボタンを右、左クリックすることでswitch文を切り替えたいのですがどうすればいいでしょうか?できれば直接以下のプログラムを直してしまってください。 import java.awt.*; import java.awt.image.*; import java.util.*; import java.util.Timer; public class MojiTest0817 { JFrame frame1; BufferStrategy bstrategy; MojiTest0817(){ frame1=new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(800 + insets.left + insets.right,600 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null); frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); java.util.Timer t=new java.util.Timer(); t.schedule(new MyTimerTask(),2,15); } public static void main(String args[]){ MojiTest0817 gtm =new MojiTest0817(); } class MyTimerTask extends TimerTask{ int line = 0; int position = 0; //表示する文字列の配列 String[] messages = { "あelloWorlハローワールド", "あいうあいうあいう", "年収うううう万円の米市職員退職"}; String[] messages2 = { "あんかけちゃーはん", "回答が寄せられるよう、以下を参考にたち", "2教えて!goo では"}; @Override public void run() { int sen=1; Graphics g = bstrategy.getDrawGraphics(); switch(sen){ case 1: if(bstrategy.contentsLost()==false){ System.out.println(messages[line].substring(0,position)); if(position < messages[line].length()){ position += 1; }else if(line == messages.length - 1){ }else{ position = 0; line += 1; } } bstrategy.show(); break; case 2: Graphics g2 = bstrategy.getDrawGraphics(); if(bstrategy.contentsLost()==false){ System.out.println(messages[line].substring(0,position)); if(position < messages2[line].length()){ position += 1; }else if(line == messages2.length - 1){ }else{ position = 0; line += 1; } } bstrategy.show(); break; } } } }

  • Javaでパラパラアニメを作成するには、

    どうしたらいいのでしょうか。 初心者なのにイキナリ作ることになってしまいました。 5枚の絵をループでアニメーションさせたいのですが。 フレームを作るところまでは出来たのですが、その先がよく分かりません。どのようにして画像を読み込んで一定のタイミングではなくそれぞれの絵のタイミングでアニメさせればいいのでしょうか、お願い致します。 import java.awt.Insets; import javax.swing.JFrame; public class Animetion { static JFrame frame1; Animetion(){ frame1 = new JFrame("アニメ"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setVisible(true); } public static void main(String[] args) { Animetion gtm = new Animetion(); //インスタンス Insets insets = frame1.getInsets(); frame1.setSize(600 + insets.left + insets.right,400 + insets.top + insets.bottom); } }

    • ベストアンサー
    • Java
  • javaの質問です。24フォントでg.drawString表示した文字

    javaの質問です。24フォントでg.drawString表示した文字に、8フォントのg.drawStringをy軸をいじり、ふりがなをつけたいのです。24フォントの文字の上に8フォントを表示するのだからx軸を3倍し、24フォントの半分の12を足せばいい(ふりがなが一文字の場合)とおもっていたのですが。24フォントの「あ*10」と8フォントの「あ*30」を表示し試したところ少しずつずれているようです。(以下のプログラムで試してみました)。x軸を揃え表示するためにはどうすればいいでしょうか import javax.swing.*; import java.awt.*; import java.awt.image.*; import java.util.*; public class MojiTest2 { JFrame frame1; BufferStrategy bstrategy; MojiTest2(){ frame1=new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(800 + insets.left + insets.right,600 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null); frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); java.util.Timer t=new java.util.Timer(); t.schedule(new MyTimerTask(),2,15); } public static void main(String args[]){ MojiTest2 gtm =new MojiTest2(); } class MyTimerTask extends TimerTask{ int line = 0; int position = 0; String[] messages = { "あelloWorlハローワールド", "あいうあいうあいうあいうあいうあいうあいうあいうあい", "年収うううう万円の米市職員退職"}; @Override public void run() { Graphics g = bstrategy.getDrawGraphics(); if(bstrategy.contentsLost()==false){ Insets insets = frame1.getInsets(); g.clearRect(insets.left,insets.top,insets.right - insets.left,insets.bottom - insets.top); g.translate(insets.left,insets.top); g.setColor(Color.BLUE); g.setFont(new Font("MS ゴシック",Font.BOLD,24)); g.drawString(messages[line].substring(0,position), 76,500 + 40 * line); g.drawString("ああああああああああああああああああああ", 76, 480); if((line==2) && (position==2)){ g.setFont(new Font("MS ゴシック",Font.BOLD,8)); g.drawString("ああああああああああああああああああああああああああああああ" + "ああああああああああああああああああああああああああああああ", 76, 460); }if(position < messages[line].length()){ position += 1; }else if(line == messages.length - 1){ }else{ position = 0; line += 1; } } bstrategy.show(); } } }

    • ベストアンサー
    • Java
  • eclipseにて~背景色が表示されない~

    JAVAゲームプログラムミング教室という本でただいまゲームを作っているのですが 本にそって、それどおりに進めていたのですが、ウィンドウの背景色を決めるところでエラーも出ていないのに指定された背景色になりません 以下にプログラムを書きます package jp.aroro.minigame; import java.awt.Color; import java.awt.Insets; import javax.swing.JFrame; public class GameTestMain { JFrame frame1; GameTestMain(){ frame1=new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets();// frame1.setSize(600+insets.left+insets.right,400+insets.top+insets.bottom); frame1.setLocationRelativeTo(null); } public static void main(String[] args) { GameTestMain gtm = new GameTestMain(); } } flame1のセットに関してはカラー以外問題なく実行されており、コンパイラ時にもエラーが出ません。 しかし、背景色は表示されません。 本の実際の実行画面では無色?→白色となっておるのですが、無色(グレーみたいな)のままです。 ちなみにEclipseのバージョンは3.0.1で 関係あるか分かりませんが Java Runtime Environment Version 6 Update 2 というものもダウンロードしてあります。 原因が分かる方はご教授ください。

    • ベストアンサー
    • Java
  • paintメソッドでエラー

    以下はSwingのフレーム上に画像を表示させようとして書いたものの全文です。実行するとSyntax errorがでますが、これはどうしてでしょうか。 なおべつのプログラムでmainメソッドとpaintメソッドを同じクラスに書いたらうまく表示できました。 アドバイスお願いします。 import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.swing.JFrame; public class MyImage3 {  public static void main(String[] args) {   MyFrame7 frame1=new MyFrame7();   frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   frame1.pack();   frame1.setBounds(100,100,400,320);   frame1.setVisible(true);  } } class MyFrame7 extends JFrame{  public MyFrame7(){   public void paint(Graphics g){   //この行でSyntax error発生    BufferedImage bImage1=null;    try {     bImage1=ImageIO.read(getClass().getResource("k_1pin.gif"));    } catch (Exception e) {     e.printStackTrace();    }    g.drawImage(bImage1,40,40,this);   }  } }

    • ベストアンサー
    • Java
  • 次のように書いたのですが、ウィンドウの背景色が白になりませんでした。setBackground辺りがおかしいと思うんですが。

    本に書いてあった下記のプログラムを書いて実行したのですが、ウィンドウズの背景色が白になりませんでした。 setBackground(WHITE)をBLACKにしても、背景色は変わりません。 どこに問題があるのか教えていただけないでしょうか。 import javax.swing.JFrame; import java.awt.Color; import java.awt.Insets; public class GameTestMain { JFrame frame1; GameTestMain(){ frame1 = new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(600 + insets.left + insets.right, 400 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null); } public static void main(String[] args) { GameTestMain gtm = new GameTestMain(); } Eclipse3.0.1を使っています。 よろしくお願いしますm(_ _)m