###質問
プログラミング初心者です。
Eclipseを使って作成したjavaのプログラムを友達にあげたいのですが、どうやってもうまくいきません。
なるべく簡単にできる方法が知りたいです。よろしくお願いします。
OSはWindows10です。
###試したこと
大きく分けて2つのアプローチを試しましたが、うまくいきませんでした。
1)テキストデータの受け渡し
Javaファイルとコマンドプロンプトさえあればプログラムをコンパイル→実行できるのだから、ソースコードのテキストデータをそのまま(メールなどで)送ればいいのでは?と思いやってみました。
Eclipseで作成したソースコードをWindowsのメモ帳にコピペ
→拡張子を.javaにしてデスクトップに保存
→コマンドプロンプトでコンパイル
→なぜかclassファイルが2つできる(片方のファイル名の末尾に$1がつく)
→ダメ元でコマンドプロンプトからjavaを使い実行
→エラー・メインクラスを検出およびロードできませんでした。と出る
ここで詰まりました。調べたらclasspathがどうこうと出てきて、たぶんそれが原因だとは思うのですが、具体的にどうしたらいいかはわかりませんでした…。
最初からテキストエディタで作成したら普通にコンパイル→実行できるのに、一度Eclipseを経由すると途端に動かなくなるのはなぜですか?
Eclipseのworkspaceからファイルをそのまま引っ張ってきたとかなら、見えないところで設定がおかしくなってるのかなという気もします。でも今回は単にテキストデータをコピーしているだけなので、どうしてそうなるのか不思議でなりません。
2)JARファイルの作成
上記の方法がダメでしたので、JARファイルでの実行も試みました。
Eclipse上でプロジェクトのエクスポートを選択、「JARファイル」と「実行可能JARファイル」の2種類それぞれで、詳細設定のチェックボックスを色々変えてみながら作成しました。しかし、いずれも.jarのアイコンが作成されるだけで、ダブルクリックしても実行されませんでした。
オプションをいじっている最中、一度だけコマンドプロンプトからjava -jar ファイル名.jarと指定して実行することができましたが、設定内容をメモしていなかったもので再現できません。お恥ずかしい限りです。
おそらく状況としてはこちらの質問者さんと同じかと思われます。ただベストアンサーで紹介されているページを見ても私には理解できなかったので、ここで手詰まりになりました。
自分で試したことは以上です。
###ソースコード
念のためソースコードを載せておきます。
ぐちゃぐちゃで見苦しい部分も多いかとは思いますが、ご容赦ください。
なお、今回はプログラム内容の評価(ここはこういう風にプログラムを組んだほうが綺麗だ、など)についてはノータッチでお願いします。
java
1package russian; 2 3import java.io.BufferedReader; 4import java.io.InputStreamReader; 5import java.util.ArrayList; 6import java.util.Random; 7 8public class NumberQuiz { 9 10 private static int ran;//問題番号を保持します 11 private static int player;//入力された回答を保持します 12 private static int result ;//正解数をカウントします 13 private static int max;//各レベルごとの問題参照範囲を保持します 14 15 //↓問題リスト 16 private static ArrayList<String> mondai = new ArrayList<String>(101) { 17 { 18 add("ноль");//0 19 add("один"); 20 add("два"); 21 add("три"); 22 add("четыре"); 23 add("пять"); 24 add("шесть"); 25 add("семь"); 26 add("восемь"); 27 add("девять"); 28 add("десять");//10 29 add("одиннадцать"); 30 add("двенадцать"); 31 add("тринадцать"); 32 add("четырнадцать"); 33 add("пятнадцать"); 34 add("шестнадцать"); 35 add("семнадцать"); 36 add("восемнадцать"); 37 add("девятнадцать"); 38 add("двадцать");//20 39 add("двадцать один"); 40 add("двадцать два"); 41 add("двадцать три"); 42 add("двадцать четыре"); 43 add("двадцать пять"); 44 add("двадцать шесть"); 45 add("двадцать семь"); 46 add("двадцать восемь"); 47 add("двадцать девять"); 48 add("тридцать");//30 49 add("тридцать один"); 50 add("тридцать два"); 51 add("тридцать три"); 52 add("тридцать четыре"); 53 add("тридцать пять"); 54 add("тридцать шесть"); 55 add("тридцать семь"); 56 add("тридцать восемь"); 57 add("тридцать девять"); 58 add("сорок");//40 59 add("сорок один"); 60 add("сорок два"); 61 add("сорок три"); 62 add("сорок четыре"); 63 add("сорок пять"); 64 add("сорок шесть"); 65 add("сорок семь"); 66 add("сорок восемь"); 67 add("сорок девять"); 68 add("пятьдесят");//50 69 add("пятьдесят один"); 70 add("пятьдесят два"); 71 add("пятьдесят три"); 72 add("пятьдесят четыре"); 73 add("пятьдесят пять"); 74 add("пятьдесят шесть"); 75 add("пятьдесят семь"); 76 add("пятьдесят восемь"); 77 add("пятьдесят девять"); 78 add("шестьдесят");//60 79 add("шестьдесят один"); 80 add("шестьдесят два"); 81 add("шестьдесят три"); 82 add("шестьдесят четыре"); 83 add("шестьдесят пять"); 84 add("шестьдесят шесть"); 85 add("шестьдесят семь"); 86 add("шестьдесят восемь"); 87 add("шестьдесят девять"); 88 add("семьдесят");//70 89 add("семьдесят один"); 90 add("семьдесят два"); 91 add("семьдесят три"); 92 add("семьдесят четыре"); 93 add("семьдесят пять"); 94 add("семьдесят шесть"); 95 add("семьдесят семь"); 96 add("семьдесят восемь"); 97 add("семьдесят девять"); 98 add("восемьдесят");//80 99 add("восемьдесят один"); 100 add("восемьдесят два"); 101 add("восемьдесят три"); 102 add("восемьдесят четыре"); 103 add("восемьдесят пять"); 104 add("восемьдесят шесть"); 105 add("восемьдесят семь"); 106 add("восемьдесят восемь"); 107 add("восемьдесят девять"); 108 add("девяносто");//90 109 add("девяносто один"); 110 add("девяносто два"); 111 add("девяносто три"); 112 add("девяносто четыре"); 113 add("девяносто пять"); 114 add("девяносто шесть"); 115 add("девяносто семь"); 116 add("девяносто восемь"); 117 add("девяносто девять"); 118 add("сто");//100 119 } 120 }; 121 122 public static void main(String[] args){ 123 124 while(true) { 125 126 result = 0;//一応初期化しておく 127 128 int level = levelSelect(); 129 130 switch(level) { 131 case 1: 132 max = 21; 133 quiz(); 134 break; 135 case 2: 136 max = 101; 137 quiz(); 138 break; 139 case 3: 140 max = 300; 141 System.out.println("ごめんね!未実装です"); 142 break; 143 } 144 145 System.out.println("\nもういちど挑戦しますか?"); 146 System.out.println("1:はい 2:いいえ"); 147 148 int retry = inputNum(); 149 150 if(retry == 2) { 151 System.out.println("\n遊んでくれてありがとう!"); 152 System.out.println("何かキーを押すと終了します"); 153 int wait; 154 wait = inputNum();//キー入力待ち 155 break; 156 } 157 158 } 159 160 } 161 162 private static int inputNum() {//数値入力 163 int x; 164 InputStreamReader isr = new InputStreamReader(System.in); 165 BufferedReader br = new BufferedReader(isr); 166 System.out.print("\n>"); 167 try { 168 String buf = br.readLine(); 169 x = Integer.parseInt(buf); 170 }catch(Exception e) { 171 x = 0; 172 } 173 return x; 174 } 175 176 private static int levelSelect() {//レベル選択 177 178 System.out.println("\nレベルを選択してください"); 179 System.out.println("1:初級【0から20までの数】"); 180 System.out.println("2:中級【0から100までの数】"); 181 System.out.println("3:上級【大きな数と時間】"); 182 183 int y = 0; 184 185 while(true) { 186 y = inputNum(); 187 if((y <= 0)||(y >= 4)) { 188 System.out.println("1~3の範囲で入力してください"); 189 continue; 190 } 191 break; 192 } 193 return y; 194 } 195 196 private static int ranMaker() {//乱数作成(問題番号選択用) 197 int a; 198 Random rnd = new Random(); 199 a = rnd.nextInt(max); 200 return a; 201 } 202 203 private static void quiz() {//出題~答え合わせメインループ 204 205 System.out.println("10問続けて出題します。\n何かキーを押してスタート"); 206 int wait; 207 wait = inputNum();//キー入力待ち 208 209 long start = System.currentTimeMillis();//時間計測スタート 210 211 for(int i = 1; i <= 10; i++) { 212 String question = mondai(); 213 System.out.println("\n"+question); 214 player = inputNum(); 215 216 if(player == ran) { 217 System.out.println("正解!"); 218 result++; 219 }else { 220 System.out.println("不正解"); 221 System.out.println("答え:"+(ran)); 222 } 223 } 224 225 long end = System.currentTimeMillis();//時間計測ストップ 226 227 long time = (end - start); 228 229 System.out.println("\n終了です!\nお疲れさまでした"); 230 System.out.println("\n◆結果発表◆"); 231 System.out.println("正答数:"+result+"問"); 232 System.out.println("所要時間:"+time/1000+"秒"); 233 System.out.print("評価:"); 234 235 if(result <= 2) { 236 if (time/1000 <= 20) { 237 System.out.println("☆☆☆☆☆\n\nあなたのランクは【だめだめ】です"); 238 System.out.println("「はやければ いいってもんじゃ ない」"); 239 }else { 240 System.out.println("★☆☆☆☆\n\nあなたのランクは【まだまだ】です"); 241 System.out.println("\n「のびしろ むげんだい」"); 242 } 243 }else if((result >= 3)&&(result <= 5)) { 244 System.out.println("★★☆☆☆\n\nあなたのランクは【まあまあ】です"); 245 System.out.println("\n「きみなら もっといけるはず」"); 246 }else if((result >= 6)&&(result <= 7)) { 247 System.out.println("★★★☆☆\n\nあなたのランクは【そこそこ】です"); 248 System.out.println("\n「そのちょうし みなおし わすれずに」"); 249 }else if((result >= 8)&&(result <= 9)) { 250 System.out.println("★★★★☆\n\nあなたのランクは【まずまず】です"); 251 System.out.println("\n「おしい あといっぽ がんばろう」"); 252 }else if(result == 10) { 253 if (time/1000 >= 20) { 254 System.out.println("★★★★★\n\nあなたのランクは【なかなか】です"); 255 System.out.println("\n「たいへん よくできました"); 256 System.out.println(" つぎは さらなるたかみ めざそう」"); 257 }else { 258 System.out.println("★☆★☆★\n\nあなたのランクは【かんぺき】です"); 259 System.out.println("\n「すばらしい Поздравляю!」"); 260 } 261 } 262 263 264 } 265 266 267 private static String mondai() {//問題参照 268 String q; 269 ran = ranMaker(); 270 q = new String(mondai.get(ran)); 271 return q; 272 } 273 274} 275 276 /* 277 private static int kotae() {//答え参照 278 ArrayList<Integer> kotae = new ArrayList<Integer>(300) { 279 { 280 add(1); 281 add(2); 282 add(3); 283 } 284 285 }; 286 } 287 288 ↑よく考えたらリスト番号で答え合わせできるからレベル3実装するまでこのプログラムいらない 289 */ 290 291 /* 292 public static String fileRead(int ran) { 293 String line = null; 294 try { 295 FileReader fr = new FileReader("file.txt"); 296 BufferedReader br = new BufferedReader(fr); 297 line = br.readLine(); 298 br.close(); 299 }catch(IOException ex) { 300 System.out.println("システムエラー"); 301 } 302 return line; 303 } 304 */ 305
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/14 04:21