エラー: メイン・クラスMainが見つからなかったかロードできませんでした

おきてるエラー

javaで作ったアプリをjavaコマンドで実行しようとした際におきたエラーです。

エラー: メイン・クラスMainが見つからなかったかロードできませんでした

原因

  • -classpath に自分が作ったクラスが入っていなかった(mainメソッドを持つクラスが参照していた)

  • 文法の理解違い

でひっかかっていたわけだけど、下のほうはけっこうわからなくて悩みました。。。

java Main

僕が作った状態だとmainメソッドを持つMain.javaコンパイルして、Main.classが出来たので上のように(クラスパスの指定は省略しています)書けばいくと思っていたのだが、

これはMianがデフォルトパッケージにいるときの場合だ。

つまり、ここで指定するクラス名は、パッケージ名を含んだ文字列になる。

java jp.snoopopo.e.desktop.Main

みたいなようにパッケージから指定したらいきました。。

syntax error near unexpected token `do

初心者すぎてすげーはまる。。(-_-#)  時間がもったいないのでメモだけ

syntax error near unexpected token `do

bashでfor文書いててはまった。

原因は、改行コード。CRがあったからfor文でdo〜doneを複数行書いてて上のとおりのシンタックスエラーになった。

CR削除してあげたらうまくいく。

fatal: 'origin/master' does not appear to be a git repository

git使っててミスっためも。

タイプミスでした。。*1というわけで拡散しとこう。

おきたエラー

pushするときに出た。

fatal: 'origin/master' does not appear to be a git repository
fatal: Could not read from remote repository.

結局

正しいコマンドは以下。

git push -u origin master

で、間違えてたやつ↓ スラッシュはいらないんだった。。

git push -u origin/master

*1:タイプミスのことtypoっていうらしい

今日のlibGDX(20150630):リソースの管理 AssetManager

今日のlibGDX目次

http://snoopopo.hatenablog.com/entry/2015/04/27/220545

今日のテーマ:リソースの管理 AssetManager

qiita.com

だいぶ遅くなったけど、ついてく。今回も上の記事を参考にやっていきます。

公式のWikiだとこのへん↓

https://github.com/libgdx/libgdx/wiki/Managing-your-assets

AssetManager てなに

com.badlogic.gdx.assets.AssetManager にいます。

今いまやっているものでは Music, Sound, TextureAtlas(またはTexture) クラスを使っていて、 これらリソース郡を管理してくれるものみたい。

管理といっているのは、同じリソースを何度も読み込まないようにしたり…という意味です。

さっそく使ってみる

ゲーム起動時に実行されるcreate()でリソースをロードしている部分です。

   private void loadResource() {
        
        assetMng = new AssetManager();
        
        // imgae.
        assetMng.load(PATH_IMG_GAME, TextureAtlas.class);
        assetMng.load(PATH_IMG_MAIN, TextureAtlas.class);
        
        // sound.
        assetMng.load(PATH_SE_ENTER, Sound.class);
        assetMng.load(PATH_SE_GAMEOVER, Sound.class);
        
        //bgm.
        assetMng.load(PATH_BGM, Music.class);
    }

loadに渡す2番目の引数のクラスは、Sound, Music, Texture, TextureAtlas 以外にも AssetManagerのコンストラクタインスタンス生成してるクラスがデフォルトで使えるし、自分でAssetLoader実装して作ることもできる。Wikiにも書いてあった.

↓ロードしたものを使ってるところ

TextureAtlas gameResource = assetMng.get(PATH_IMG_GAME, TextureAtlas.class);
title = new Image(gameResource.findRegion("title"));
title.setPosition(0, 360);

getするときにクラス渡してあげないと、Objectでとれてしまってキャストする必要があったので指定しています。

捨てるところ↓

   @Override
    public void dispose () {
        assetMng.dispose();
    }

unloadで一つずつ消す場面がよくわかんなかったので、今いまはdisposeで全消ししてしまおう。

20150716 add ------

unloadでひとつづつ消すのはメモリの要領の問題のようだ。

上の例だとdisposeが呼ばれるのは、ゲームを閉じたときなので、起動から1回しか呼ばれないことになる。

その間ゲーム全体のリソースをロードしたままにしておくのは、要領の問題的に厳しい。(少なければ大丈夫とかそういう話になってしまう)

なので、不要のものはunloadするというのが、よさそう。

「非同期でロードされます」の意味

「NowLoading…」とかゲームでよくありますが、

別スレッドで読み込んでいる間にもう片方のスレッドが「NowLoading…」を描画している、のような動きをしているはずでマルチスレッドになっています。 こういう動きのことを非同期というみたい。ゲームの基本的なはなしっぽい…

そうしないと、リソースをロードしている間にほかの動作もできない(NowLoadingも出せない)。

別のスレッドが読み込んでいるということは、 そのスレッドが読み込み完了しているかどうかを使う側は意識しないといけないことになる。

というのが以下のメソッドたち。

AssetManager#finishLoading();

これはロードするまで、次の処理を実行しなくて、

assetMng.finishLoadingAsset(PATH_IMG_GAME);

これも引数で指定したものがロードされてるまで次の処理を実行しない。=よってこれが長いゲームが更新されない時間ができておかしくなる。

なので、updateメソッドで拾って、NowLoading出して、終わったタイミングで使うようにすればよい!

   if (!assetMng.update()){
        System.out.println("now loading");
    } else {          
        TextureAtlas gameResource = assetMng.get(PATH_IMG_GAME, TextureAtlas.class);
        title = new Image(gameResource.findRegion("title"));
        title.setPosition(0, 360);
        // ...
    }

ということと理解したけど、実際ゲームに組み込むといろいろ出る(最初にcreateでリソースのロードしてるけど、NowLoadingとか出すならゲームループの中でやらないと…なので、render側に持ってくとかしないといけないね)ので、E.のほうでやってみることにする。

今日のvim(20150627):【実践Vim編】第4章 ビジュアルモード

目次

http://snoopopo.hatenablog.com/entry/2015/06/12/170944

今日のテーマ:第4章 ビジュアルモード

第4章をやってくー!

便利なビジュアルモードのコマンド

gv 直前に選択した範囲を再度選択してくれる。

o 選択範囲の始点と終点の入れ替え

ビジュアルブロックモード

矩形モード何に使うのかわからなかったけど、使える場面が紹介されてる。 表とかで、こんな↓ところで使える。

”sample/aaa.png”
”sample/bbb.png”
”sample/ccc.png”

フォルダがかわった、(sampleからtmpにかわったとか)のときは矩形モードで、 sampleの文字3行分選択してrで置換すればよいかんじ。

Esc と C-c の挙動が違う

TIPS24,25 で矩形モードで複数行選択したあとにA とかの挿入モードにかわってくれるコマンドをやって挿入したテキストは、ノーマルモードに戻ったタイミングで、選択した複数行に対して適応される。

のだけど、これは、EscC-[ で抜けた場合はなるけど、僕が使っているC-cではなりません(複数行に適応されなかった)でした。

なのでC-cEscとは挙動が違うみたいっすね。今まで一緒かと思ってたけど。。

今日のvim(20150626):【実践Vim編】第3章 挿入モード

目次

http://snoopopo.hatenablog.com/entry/2015/06/12/170944

今日のテーマ:第3章 挿入モード

第3章をやってくー!

挿入モードのまま削除

C-h これはBackSpaceとおなじ

C-w wなので、直前のワードを消してくれる

C-u 行ごと消してくれる

これはvimだけのことじゃなくてbashシェルでも使えるらしい。vimのコマンドモードでもつかえる

挿入ノーマルモード

挿入モードにいる状態でノーマルモードのコマンドを1回やって、挿入モードに戻りたいときは、

挿入ノーマルモードが使える。

C-o 挿入ノーマルモードになる

gvimだと -- 挿入 -- てなっているのが、 -- (挿入) -- ってなりますね。

この状態で、ノーマルモードのコマンドを1回だけ実行出来る!

挿入モードのままレジスタからペースト

C-r + レジスタ名 挿入モードのままレジスタからペースト

計算

C-r + = + 計算式 計算結果をペースト

これはすごいな…

よく使うgitコマンド

http://snoopopo.hatenablog.com/entry/2015/04/13/011734

↑の続き。メモ。今回はちょっと使うだけで出てくることの自分用メモ

特定のリビジョンに戻す

いつのバージョンからバグが入ったのかな?ってときは、 ガンガン以前のversionの状態に戻していきたい。

そんな時に使う。

・git logで戻したいリビジョンを確認

git log

git reset --hard [リビジョン]

2019/0216追記:----------

これをやると、 作業中のファイルが上書きされることになるので、やる前に作業中のファイルがない状態にしておいたほうがいいと思う。

元の最新のバージョンに戻したい場合は、ORG_HEADなどの便利なエイリアスもあるが、 シンプルに上のコマンドと同じように最新のリビジョンを指定してあげればいい。

その際、git log で元に戻したリビジョン以降のログが見えなくなっているので、 最近は、Sourcetree でリビジョンの確認をするようにしてる。

ローカルとマスターの差分表示

git diff [ファイル名 ない場合は全部表示]

削除

git rm [ファイル名]

ローカル編集をなかったことにして、最新のファイルに置き換えたい

git checkout master [ファイル名]

git add するとき更新したやつだけaddしたい

git add -u

logみる

git log

表示件数が多すぎて困る場合は、数件を-nオプションで指定できる

git log -n 5

-p で差分表示

-2 とかやると直近2コミットログがみれる

タグつける

git tag -a [タグ名] -m '[コメント]'

タグの一覧みる

git tag

タグをリモートリポジトリにpush

git push [originとかのリモートサーバ名] [タグ名]

git add をキャンセル

git reset [addしてたディレクトリとかファイル]