Java ワンポイント ~コンソールをリフレッシュする~

イントロダクション

テキストRPGを作成中です。
コンソールのみで展開する仕様なので、コンソールのれふれっふ処理が必要になりました。

調べたので、アップしておきます。

Javaからコマンドを実行する

具体的には、コンソール画面(コマンドプロンプト(Win)やターミナル(Mac))でのコマンド実行をJavaプログラムから実行するということになります。

こちらのサイトを参考にすると、実行方法としては以下のようにコードを書きます。

Rumtime.getRuntime().exec(コマンド);

しかし、下のようなエラーが出ました。

java.io.IOException: Cannot run program "cls": CreateProcess error=2, 指定されたファイルが見つかりません。
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:621)
at java.lang.Runtime.exec(Runtime.java:451)
at java.lang.Runtime.exec(Runtime.java:348)
at jp.zenryoku.rpg.util.ConsoleUtils.clearConsole(ConsoleUtils.java:172)
at jp.zenryoku.rpg.TextRpgLogic.updateData(TextRpgLogic.java:115)
at jp.zenryoku.rpg.TextRpgGameEngine.start(TextRpgGameEngine.java:40)
at jp.zenryoku.rpg.GameMain.main(GameMain.java:16)
Caused by: java.io.IOException: CreateProcess error=2, 指定されたファイルが見つかりません。
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init(ProcessImpl.java:444)at java.lang.ProcessImpl.start(ProcessImpl.java:139)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 7 more

EclipseからMainメソッドを起動した場合でした。

Fix

調べてみると下のようなコードでコンソールをクリアdできるようだ。

new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();

ただし、Eclipseではちゃんとクリアできないが、JARファイルから起動したときはちゃんとクリアされた。

関連ページ一覧

EclipseセットアップWindows版

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜

Java テキストRPG(戦闘シーンのみ)を再作成する2~設計からやり直す~

前回作成したものは、ちゃんと設計していませんでした。とうかアイディアだけが先走り、収拾がつかなくなった次第です。

今回作成するのもの

TesxtRPGをだんだんレベルアップしていく方向で作成しようと考えています。イメージとしては市価のような感じでレベルアップしていこうと考えています。

Lv1: 戦闘シーンのみ
Lv2: レベルアップ・ステータスの表示を追加
Lv3: タイトル表示~ストーリー(シーン)の表示を追加

  1. タイトル表示
  2. ストーリーを開始(シーン切り替えを実装)
  3. 登場する敵はラスボスのみ
    Lv4: ミニストーリーをRPGにする。
  4. イベント発生から、シーンの切り替えの実装
  5. 装備の変更を実装する
    Lv5: ミニストーリーをRPGにする2
  6. 一つの冒険を実装する、ゴールは隣町の近所に住む魔王を倒す
  7. エンディングを実装する

そして、今回実装するのはLv1です。
ここでは、戦闘シーンに必要な登場人物(モンスターを含む)を実装することに重きを置きます。

成果物

<Eclipseでの実行>

<コマンドプロンプトでの実行>

Lv1:TextRpgゲーム

まずは、戦闘シーンをイメージして、フローチャートを作成します。

<作成したフローチャート>

実際には、テストケースを作成しながらこのフローチャートを作成しました。

大まかに、下のように行う処理のイメージを図にする感じです。

フローチャート

ゲームの開始から、終了までの流れを図にしたものです。

作成するときに考えるのは「どのように、ゲームを進めるか?」です。具体的には以下のように考えました。

フローチャートを作る

<ステップ1>
テキストRPG(コンソール表示)で戦闘シーンをどのように進めるか?
まず、頭に浮かんだのは某有名ゲームソフトです。
戦闘シーンの開始時には「XXXが現れた!」と表示されます。ならばこちらもそのように。。。
そのほか、戦闘シーンのイメージはこのゲームソフトです。
そして、初期表示を行い、入力受付。。。と処理が続きます。

<ステップ2>
入力後どのような動きを行うか?今回は戦闘シーンのみなので例外的に「bye」と入力したらアプリケーションを終了するように実装します。
他は、入力⇒画面の更新(HPが減ったり、モンスターがダメージを受けたり)を行います。

クラス図を作る

実際に作成したクラス図は下のものです。赤くなっているものは今回使用しないもの(クラス)です。

フローチャートと同様にクラス図も作成します。
フローチャートを参考に、登場する人物(クラス)を用意します。
今回のプログラム起動方法としては、LWJGLを参考にしてやりました。つまり、①メインメソッドのクラス(GameMain)から②今回作成するゲームを実行するクラス(TextRpgGameEngin)を呼び出し実行します。
ここでのポイントとしては、②のクラスはThreadクラスを継承しマルチすれっと処理に対応できるようにすることです。

そうすることで、ゲーム(アプリケーション)を起動するスレッドと、例えばDBサーバーを起動するスレッドをマルチスレッドで起動したり、ほかにもアイディアがあればそのような実装ができます。

テストケースから作成する

フローチャートとクラス図からそれぞれのクラスに対するテストケースを作成していきます。

テストケースを実行することを考えると、最終的に呼び出されるクラス、「XXXUtilsクラス」がテストケースを実装するのに楽だろうと思われるので、ここら辺から攻めていきました。

フローチャートでも初めにある『「XXXが現れた!」を表示する』という処理から実装しました。あとはフローチャートの処理順にテストケースを作っていきました。初めからフローチャートの順序か。。。

作成したもの

Githubにアップロード(PUSH)しています。

Lv2の実装前に

現状で、実装するのに調査が必要だったものや、てこずったものに関して記載したいと思います。

JUnitでのコンソール出力

今回作成したゲーム(アプリ)は画面表示と言いながらコンソール出力になります。なので、テスト時には出力内容を確認する必要があり、出力先を変更し確認するために取得する必要がありました。

<解決策>
具体的には下のコードになるのですが、手順としては以下のようになります。

  1. 標準出力の出力先を変更する。
  2. 出力した文字列を取得する。

列挙するとシンプルな感じですが、実装もシンプルでした。
使用したの部品(Java API)配下の者です。

  • org.junit.platform.commons.logging.Logger
  • java.io.ByteArrayOutputStream
  • java.io.PrintStream

上記の部品を使用して、標準出力をPrintStreameに変更、PrintStreamにはByteArrayOutputStreamを渡して作成=出力先がByteArrayOutputStreamになる。

テスト実行時の出力する文言に関しては、org.junit.platform.commons.logging.Loggerへ出力しました。

/** ログ出力 */
private static final Logger LOG = LoggerFactory.getLogger(FirstJankenMainTest.class);
/** 標準出力確認 */
private static final ByteArrayOutputStream console = new ByteArrayOutputStream();

テストクラスの起動ですが、これは@BeforeClassを使用しました。

  1. テストクラスの起動時にテスト対象クラスをインスタンス化
    @BeforeClass
    public static void initClass() {
    target = new ConsoleUtils();
    // 標準出力の出力先を変更する
    System.setOut(new PrintStream(console));
    }
  2. 各テストケースの実行前に出力した文字列をリセット
    /**
    * テストの準備
    */
    @Before
    public void init() {
    // フィールド変数
    console.reset();
    }
    
  3. テストを実行した結果をassertEqualsで比較

    /**
    * ステータス表示のテスト:2桁
    */
    @Test
    public void testPrintBattleStatus1() {
    // プレーヤーは一人
    Player player = new Player("test");
    // 名前の文字数は、全角は4文字、半角8文字まで
    player.setLevel(10);
    player.setHP(20);
    player.setMP(10);
    target.printBattleStatus(player);
    LOG.info(() -> SEP + console.toString());
    
    String expect = "**** test ****\r\n" +
            "  Lv: 10     *\r\n" +
            "  HP: 20     *\r\n" +
            "  MP: 10     *\r\n" +
            "**************" + SEP + SEP;
    assertEquals(expect, console.toString());
    }
    

こんな風に実装しました。

コマンドの取得

Playerクラスで実装したメソッドの中に「たたかう」などのコマンド実行時に起動するメソッドがあります。そして、コンストラクタなど、コマンド実行以外で使用するメソッドも定義していあります。
「はて?どうやってコマンド用のメソッドのみを取得しようか?」と考えたところ「アノテーションがあ~るじゃないですか!」とひらめきました。

早速実装しました。参考サイトはこちらです。

  1. 自作のアノテーションを作成。
    /**
    * 行動を表すアノテーション
    * 。
    * @author 実装者の名前
    */
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Command {
    /** 表示順 */
    public int index();
    /** 実行選択肢 */
    public String commandName();
    }
  2. コマンド用のメソッドにアノテーションをつける
    /**
    * 攻撃コマンド。
    *
    * @return 武器の攻撃力
    */
    @Command(index=1, commandName="たたかう")
    public int attack() {
    return mainWepon.getOffence();
    }
    
  3. アノテーションをつけたメソッドを取得。
    ※コンソール出力するめそっどですが、取得した内容を出力しています。

    /**
    * プレーヤーの行動選択肢を一覧表示する。
    *
    * @param player
    * @return コマンドマップ(indexでソート済み)
    */
    public Map<Integer, String> printCommandList(Player player) {
    Method[] mess = player.getClass().getDeclaredMethods();
    // 並び替え機能付きのMAP
    Map<Integer, String> commandMap = new TreeMap<>();
    for(Method mes : mess) {
        Command ano = mes.getAnnotation(Command.class);
        if (ano != null) {
            // マップにインデックス(順番)とコマンド名を登録
            commandMap.put(ano.index(), ano.commandName());
        }
    }
    // 並び替え後に表示
    commandMap.forEach((Integer index, String value) -> {
        System.out.println(index + ": " + value);
    });
    return commandMap;
    }

こんな感じで実装しました。

コンソールのクリア

[こちらの記事にも記載]()しましたが、以下のコードでコマンドの実行がでるようです。

Rumtime.getRuntime().exec(コマンド);

しかし、IOExceptionが出力され。。。調べてみるとWindowsでは下のようなコードで実行するとよいみたいです。

new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();

Eclipseで実行してみたところ、文字化けた文字が出力されるだけで、意味なかったのですが、JARファイルを作成し、コマンドプロンプトで実行してみたところ問題なく動きました。

今後は、Lv2の実装を進めていきたいと思います。

でわでわ。。。

関連ページ一覧

EclipseセットアップWindows版

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜

Java テキストRPG(戦闘シーンのみ)を再作成する~LWJGLを参考に作り直す~

事の発端について

前回作成した、テキストRPG(戦闘シーンのみ)をJavaFXへと移植しようかと考えてたのですが、如何せん、絵とか必要になるだろうと思い保留していました。

しかし、ゲームブックの要領で、ストーリーを進めるのであれば、ずいぶんと楽しくプレーできそうだと思いました。

そんなわけで、その方向でプログラムを組みなおします。

ここで肝になるのが「ゲームループ」という言葉と実装内容です。ループ処理をするのはよいのですが、参考にするソースを見てみるとマルチスレッド使ったりしているので、ちょっと不安になった次第です。。。

LWJGLのゲームループを解析

以前作成した、LWJGLのプログラムサンプルコードを参考に作成したのですが「GameEngine」と「GameLogic」という二つのクラスを使用してうまく作られていました。

登場人物(クラス)

  • Mainクラス
  • DummyGameクラス
  • GameEnginクラス
  • Windowクラス(今回は無視する)
  • Renderクラス(今回は無視する)

今回作成するゲームは、コンソールゲームなのでWindowとか3Dモデルのレンダリングは行わないので今回は無視します。

上記のクラスの関係性を解析

Mainクラス、下のソースを見てみると以下のクラスを呼び出しています。

  1. IGameLogic
  2. GameEngeine

IGameLogicインターフェースはGameLogicに当たる処理を実装したクラス=DummyGameクラスです。
GameEngineはそのままですね。。。

ポイントは、GameEngineクラスに、DummyGameを渡して、インスタンスを生成しているところです。
つまり、DummyGameがGameEngineクラスで使用することができるということです。

DummyGameをGameEngineに渡してしまえば、あとはGameEngineクラスで自由に処理ができます。

なるほど、GameEngineクラスはいちいち改修してなくてもよさそうです。

ということは。。。

今回の実装するテキストRPG(戦闘シーンのみ)は、

  • メインメソッドを持つMainクラス
  • IGameLogicに相当するインターフェースを実装したTextRpgGameクラス
  • GameEngineクラス

上のようなクラスを使用して実装するのがよいと思いましたが、GameEngineクラスは割愛してMainクラスに入れ込んでしまおうと思います。
理由は、いろんなバリエーションでGameEngineクラスを使用するつもりはないので、このようにします。

もし、必要があればその時に追加実装しようと考えています。

テキストRPGの記事

  1. Java ミニゲーム ソース付き 〜RPGの戦闘シーンを作るin Console〜
  2. Java ミニゲーム ソース付き 〜RPGの戦闘シーンを作る2 in Console〜
  3. Java ミニゲーム ソース付き 〜ここまでのまとめ〜
  4. Java ミニゲーム ソース付き 〜コンソールアプリからGUIアプリへ〜
    ここでアイディアに詰まる。。。

TextRpg前回作成したもの1

TextRpg前回作成したもの2
文字をゆっくり表示する実装を行ったものです。

参考にしたソース

Mainクラスのソース
public class Main {

    public static void main(String[] args) {
        try {
            boolean vSync = true;
            IGameLogic gameLogic = new DummyGame();
            GameEngine gameEng = new GameEngine("GAME", 600, 480, vSync, gameLogic);
            gameEng.run();
        } catch (Exception excp) {
            excp.printStackTrace();
            System.exit(-1);
        }
    }
}
DummyGameクラスのソース
public class DummyGame implements IGameLogic {

    private static final float MOUSE_SENSITIVITY = 0.2f;

    private final Vector3f cameraInc;

    private final Renderer renderer;

    private final Camera camera;

    private GameItem[] gameItems;

    private Vector3f ambientLight;

    private PointLight pointLight;

    private static final float CAMERA_POS_STEP = 0.05f;

    public DummyGame() {
        renderer = new Renderer();
        camera = new Camera();
        cameraInc = new Vector3f(0.0f, 0.0f, 0.0f);
    }

    @Override
    public void init(Window window) throws Exception {
        renderer.init(window);

        float reflectance = 1f;
        //Mesh mesh = OBJLoader.loadMesh("/models/bunny.obj");
        //Material material = new Material(new Vector3f(0.2f, 0.5f, 0.5f), reflectance);

        Mesh mesh = OBJLoader.loadMesh("/models/cube.obj");
        Texture texture = new Texture("textures/grassblock.png");
        Material material = new Material(texture, reflectance);

        mesh.setMaterial(material);
        GameItem gameItem = new GameItem(mesh);
        gameItem.setScale(0.5f);
        gameItem.setPosition(0, 0, -2);
        gameItems = new GameItem[]{gameItem};

        ambientLight = new Vector3f(0.3f, 0.3f, 0.3f);
        Vector3f lightColour = new Vector3f(1, 1, 1);
        Vector3f lightPosition = new Vector3f(0, 0, 1);
        float lightIntensity = 1.0f;
        pointLight = new PointLight(lightColour, lightPosition, lightIntensity);
        PointLight.Attenuation att = new PointLight.Attenuation(0.0f, 0.0f, 1.0f);
        pointLight.setAttenuation(att);
    }

    @Override
    public void input(Window window, MouseInput mouseInput) {
        cameraInc.set(0, 0, 0);
        if (window.isKeyPressed(GLFW_KEY_W)) {
            cameraInc.z = -1;
        } else if (window.isKeyPressed(GLFW_KEY_S)) {
            cameraInc.z = 1;
        }
        if (window.isKeyPressed(GLFW_KEY_A)) {
            cameraInc.x = -1;
        } else if (window.isKeyPressed(GLFW_KEY_D)) {
            cameraInc.x = 1;
        }
        if (window.isKeyPressed(GLFW_KEY_Z)) {
            cameraInc.y = -1;
        } else if (window.isKeyPressed(GLFW_KEY_X)) {
            cameraInc.y = 1;
        }
        float lightPos = pointLight.getPosition().z;
        if (window.isKeyPressed(GLFW_KEY_N)) {
            this.pointLight.getPosition().z = lightPos + 0.1f;
        } else if (window.isKeyPressed(GLFW_KEY_M)) {
            this.pointLight.getPosition().z = lightPos - 0.1f;
        }
    }

    @Override
    public void update(float interval, MouseInput mouseInput) {
        // Update camera position
        camera.movePosition(cameraInc.x * CAMERA_POS_STEP, cameraInc.y * CAMERA_POS_STEP, cameraInc.z * CAMERA_POS_STEP);

        // Update camera based on mouse            
        if (mouseInput.isRightButtonPressed()) {
            Vector2f rotVec = mouseInput.getDisplVec();
            camera.moveRotation(rotVec.x * MOUSE_SENSITIVITY, rotVec.y * MOUSE_SENSITIVITY, 0);
        }
    }

    @Override
    public void render(Window window) {
        renderer.render(window, camera, gameItems, ambientLight, pointLight);
    }

    @Override
    public void cleanup() {
        renderer.cleanup();
        for (GameItem gameItem : gameItems) {
            gameItem.getMesh().cleanUp();
        }
    }

}

GameEngineクラスのソース

public class GameEngine implements Runnable {

    public static final int TARGET_FPS = 75;

    public static final int TARGET_UPS = 30;

    private final Window window;

    private final Timer timer;

    private final IGameLogic gameLogic;

    private final MouseInput mouseInput;

    public GameEngine(String windowTitle, int width, int height, boolean vSync, IGameLogic gameLogic) throws Exception {
        window = new Window(windowTitle, width, height, vSync);
        mouseInput = new MouseInput();
        this.gameLogic = gameLogic;
        timer = new Timer();
    }

    @Override
    public void run() {
        try {
            init();
            gameLoop();
        } catch (Exception excp) {
            excp.printStackTrace();
        } finally {
            cleanup();
        }
    }

    protected void init() throws Exception {
        window.init();
        timer.init();
        mouseInput.init(window);
        gameLogic.init(window);
    }

    protected void gameLoop() {
        float elapsedTime;
        float accumulator = 0f;
        float interval = 1f / TARGET_UPS;

        boolean running = true;
        while (running && !window.windowShouldClose()) {
            elapsedTime = timer.getElapsedTime();
            accumulator += elapsedTime;

            input();

            while (accumulator >= interval) {
                update(interval);
                accumulator -= interval;
            }

            render();

            if ( !window.isvSync() ) {
                sync();
            }
        }
    }

    protected void cleanup() {
        gameLogic.cleanup();
    }

    private void sync() {
        float loopSlot = 1f / TARGET_FPS;
        double endTime = timer.getLastLoopTime() + loopSlot;
        while (timer.getTime() > endTime) {
            try {
                Thread.sleep(1);
            } catch (InterruptedException ie) {
            }
        }
    }

    protected void input() {
        mouseInput.input(window);
        gameLogic.input(window, mouseInput);
    }

    protected void update(float interval) {
        gameLogic.update(interval, mouseInput);
    }

    protected void render() {
        gameLogic.render(window);
        window.update();
    }
}

関連ページ一覧

EclipseセットアップWindows版

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜

JUnitの使い方~テストクラスの作成と実行~


JUnitの設定を行う。

EclipseでJUnitの設定を行います。

  1. プロジェクトを右クリック
  2. ビルドパスを選択する
  3. ライブラリの追加を選択
  4. JUnitを選択

テストするためのクラスを作成する。

今回は、サンプルなので簡単なものです。
ずばり、下のようなクラスを作成しました。

package jp.zenryoku.sample;

/**
 * JUnitの作成から実行までのサンプルクラス
 * @author 作成者の名前
 *
 */
public class JUnitSample {
    /** 定数 */
    private static final String TITLE = "JUnitサンプル";
    /** フィールド変数 */
    private int age;

    public JUnitSample() {
        // 年齢を設定する
        age = 10; // とりあえずは10歳にする
    }

    /**
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * @param age セットする age
     */
    public void setAge(int age) {
        this.age = age;
    }

}
  • 定数として「TITLE」を定義
  • フィールド変数に年齢を定義
  • コンストラクタで年齢を10に設定
  • メソッドとして年齢のGetterSetterを作成

JUnitテストクラスを作成

テストクラスを作成するときは、(自分の常識内では)以下のように作成します。

  1. パッケージ名はテスト対象クラスと同じ
  2. テスト対象クラス+Testという名前にする

テストクラスを作成するときには、テスト対象クラスを定数として保持してしまうと楽なのでそのようにしています。状況によりstatic(静的)でやるべきか、そうしないべきかの判断は、使用したいアノテーションで判断するとよいと思います。

例:
1.テストクラスを起動するときに一度だけ起動するのを「@BeforeClass」アノテーションを使用するならば、static修飾子をつける必要がある。
2.テストケースの実行時に必ずコンストラクタを起動するのであれば、「@Before」を使用するとよい

\@Beforeを使用する場合

上に作成したテストケースを修正して、「@BeforeClass」アノテーションを使用しないパターンで実装してみます。

ここでコンストラクタに引数を追加したものを追加します。具体的には下のようなコードになります。

public JUnitSample(int age) {
    this.age = age;
}

そして、実行するテストに関しては、下のようになります。

package jp.zenryoku.sample;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

/**
 * JUnitテストクラス: パッケージ名が同じなのでインポートしなくてよい
 * @author 作成者の名前
 */
public class JUnitSampleTest {
    /** テスト対象クラス(テスト実行時には必ず1つなのでstaticでよい) */
    private JUnitSample target;

    /**
     * このテストクラスをインスタンス化するときの処理。
     * このメソッドは1度だけ動く
     */
    @BeforeClass
    public static void initClass() {
        // テスト対象クラスをインスタンス化
//      target = new JUnitSample();
    }

    /**
     * controll + spaceでインポートできる。
     * テストを実行する前の準備処理、テストケースが動くたびに動く
     */
    @Before
    public void initTest() {
//      // 15歳に設定しなおす。
//      target.setAge(15);
        target = new JUnitSample(12);
    }

    /**
     * テストケース1:年齢(age)が15歳に設定されているか確認する。
     */
    @Test
    public void test01() {
        // 警告が出るのでstaticインポートに変更する。
        assertEquals(12, target.getAge());
    }
}

そして、コンストラクタ以外でも年齢の設定を変更できることを確認するテストケースを追加します。

/**
 * テストケース2:年齢を5歳に設定しなおしたときのテスト
 */
@Test
public void test02() {
    target.setAge(5);
    assertEquals(5, target.getAge());
}

関連ページ一覧

Eclipseセットアップ(Windows版)

Eclipse セットアップ(MAC版)

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜

Git操作 一覧

Introduction

前提として、Gitをインストールしてリモート・リポジトリに接続した状態での実行を想定しています。
大まかな概要として、動画もあります。
「早い話がこんな感じ」ということです。

参考サイト

Gitbook(日本語版)

Index

Git init

Git 初期化方法、リポジトリとして使用するディレクトリに移動して下のコマンドを叩きます。
ラズパイ上で実行してみました。ただし、一度初期化していたので「再初期化」になっています。

git init

Git pull

リモートリポジトリからソースを取得します。参考サイトはこちら

git pull <対象のURL>

<実行結果>

Connect Github

Git接続について

EclipseでGithubからチェックアウト(PULL)してくる手順を記載しています。「プロジェクトの作成From Github」という項で記載しています。

Git Command

  • log: 参考サイト
    <コマンドサンプル>

  • reset: 参考サイト
    --hard:コミット取り消した上でワークディレクトリの内容も書き換えたい場合に使用。
    --soft:ワークディレクトリの内容はそのままでコミットだけを取り消したい場合に使用。

    1. HEAD^ 直前のコミットを意味する。
    2. HEAD~{n} n個前のコミットを意味する。
    3. HEAD^やHEAD~{n}の代わりにコミットのハッシュ値を書いても良い。
    4. gitのv1.8.5からは、「HEAD」のエイリアスとして「@」が用意されている。
    5. HEAD~とHEAD^と@^は同じ意味。
    6. HEAD^^^とHEAD~3とHEAD~\~~とHEAD~{3}と@^^^は同じ意味。
      <コマンドサンプル>
    git reset --soft "HEAD^"

  • status: 現在の状態を表示する上記キャプチャ参照

    git status
  • commit: 参考サイト
    -m(--message): コミットコメントを設定する
    <コマンドサンプル>

    git commit -m "Part1.Chapter1.Section1: じゃんけんゲームを設計する~フローチャート~"

コミットメッセージの修正

参考ページ

  1. コマンドラインで、修正したいコミットのあるリポジトリに移動します
    コマンドプロンプトを開きリポジトリのディレクトリに移動

  2. git commit --amend と入力し、Enter を押します。

  3. テキストエディタでコミットメッセージを編集し、コミットを保存します。

実際にやってみたところGUIでの操作はわかりませんでした(見つけられませんでした)しかし、コマンドでやると簡単に行けました。実際に行った操作は以下の通りです。

> D:
>cd D:\リポジトリのディレクトリ
>git commit --amend (ファイル名の指定)
># VIエディタが開くのでコメントを修正
>git pull
>git push

VIエディタでの編集は下のように文字化けていますが、入力した文字は決定前に通常の文字で入力できます。

Set Charset

文字コードの設定を行います。
git logコマンドを実行すると文字化する場合があります。これの解決方法としては環境変数にLESSCHARSETを追加することです。
具体的には下のコマンドを叩きます。

set LESSCHARSET=utf-8

Branch

ブランチ操作を行います。
参考にしたサイトはGitbookです。

ブランチの作成
git branch ブランチ名

実行したコマンドは以下の通りです。

git branch preceding1

確認に使用したコマンドは

git branch -a

ブランチを作成しても、現在のブランチは移動していないので、移動する必要があります。

git checkout ブランチ名

移動したら、状態確認

git status

をしてリモート側に、ローカルで作成したブランチをアップロード(PUSH)します。

とりあえずPUSH!とやるとエラーが出ました。

git push

下のコマンドを使用してください。ということで。。。

git push --set-upstream origin preceding1

こんな感じでできました。

submodule

外部リポジトリを参照して差分ジュールを追加します。参考サイトはGitbookです。
これは、単純に以下のようなコマンドを実行するだけです。

git submodule add "githubのURL"

実際に起動したコマンドは、

git submodule add https://github.com/ZenryokuService/DocumentRepo.git

です。

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜

フローチャートの書き方

イントロダクション

フローチャートは処理の順序を絵にしたものです。
単純にアプリを作成するときに処理の順序を絵にしておくと後が楽、よりまとまったものが作れる。という次第です。とりあえず下のようなものです。じゃんけんゲームのフローチャートです。

作成したフローチャート

使用する部品

  1. 処理の内容を示す

  2. 矢印は省略します

  3. 条件分岐

  4. 事前準備された処理

  5. セットアップ操作などの準備プロセスフロー

  6. 処理の開始、終了など(端末)

  7. データ

とりあえず主要なものは上のものです。

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜

開発環境構築~Windows版Eclipseの設定~

Index

Install Eclipse

MergeDocからダウンロードします。

最新版のものを選択します。すると下のようにダウンロードするEclipseを選択できる部分が見つけられるので、迷ったら「Standerd Edition」を選択しましょう。細かいプラグインなどはいつでもインストールできます。※これでも結構なプラグインが入っていました。

そして、ダウンロードが始まらない場合は、リンクの部分をクリックします。

今回は、「20200702.zip」というファイルをダウンロードしました。
ダウンロードしたら、Cドライブ直下(C:)に解凍します。パスが長くなってEclipseが動かなくなる可能性があるためです。

ちなみに、自分の場合ZIPファイルの解凍ができなくてつまずきました。
7ZIPをインストールして実行したらうまくいきました。ちなみに回答したのは。「D:\」です。なので解凍後は「D:\pleiades」となりました。

Eclipseを動かす

試しに、eclipse.exeを起動してみてください。うまく動けばそれでよし。もし動かない場合はエラーメッセージが出るのでそれをちょっと眺めます。

早話が、「JDK(JRE)がないですよ!」というエラーです。JDKをダウンロードしてください。
解凍したフォルダにある「eclipse.ini」を開きバーチャルマシン=JDKを設定します。(追記してください。)

ちなみにエラーログの場所は以下になります。
WORKSPACE_HOME/.metadata/.log
自分の環境だと以下になります。

D:\pleiades\workspace.metadata.log

-vm
JAVA_HOME¥bin¥javaw.exe

JDKがない場合は

  1. OracleのHPからダウンロードできます。※この場合はOracleのユーザー登録が必要です。

  2. OpenJDKを開いてほしいバージョン番号(widows 64bit jdk8)を選択します。

  3. eclipse.iniの設定を行う。

    • 使用するJVM(JDK)を指定します。

      -vm
      D:/Apps/jdk1.8.0_265/bin/javaw.exe
    • 使用するメモリの指定を行います。

      -vmargs
      -Xms512m # メモリの最小値
      -Xmx1024m # メモリの最大値

      最終的に以下のようになりました。

-vm
D:/Apps/jdk1.8.0_265/bin/javaw.exe
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Xms512m
-Xmx1024m
-Dosgi.requiredJavaVersion=1.8
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-Dosgi.dataAreaRequiresExplicitInit=true
-Xverify:none
-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-javaagent:lombok.jar

しかし、これで終わりではありませんでした。JDKが32bit版だったようで下のようなエラーが出ました。

なので、再度64ビット版をダウンロードしました。amazonのページでした。

これで自分のところではEclipseの起動ができました。

Setting Eclipse

Eclipseの設定を行います。
初めにEclipseを起動するとワークスペースの場所を聞かれます。
特に気にしないのであれば、そのままの値でワークスペースを作成して問題ありません。

そして、起動すると下のような画面が見れます。

不要なプラグインの削除

ヘッダーメニューから。。。
Help(ヘルプ) -> Market Place(マーケットプレイス)を開く
すると下のように、追加するプラグインを検索する画面が見れます。
MarketPlace

そして、インストール済みのタブを選択します。
InstalledPlugin

引き続き、不要なプラグインを選択
noNeedPlugin

変更と表示されているプルダウンからアンインストールを選択し不要なプラグインを削除します。

更新(プラグインのアンインストール)を適用するのにEclipseの再起動を行います。

プロジェクトの作成From Github

Githubにあるリポジトリからプロジェクトを作成します。
まずは、Githubにて、プロジェクト用リポジトリを作成します。
gitRepo1

そして、Codeとある部分をクリックすると下のようにダイアログが出ます。
dialog1
ここからURLをコピーします。

今度はEclipseに戻り、プロジェクトのインポートを選択します。
pachageExp

すると、下のようなダイアログが開くので、Gitからプロジェクト(スマートインポートでもどちらでもよいが今回はスマートインポートを選択しました。)
gitImport1

次は、クローンを選択します。
gitImport2

そして、先ほどコピーしたGihubのリポジトリURLを貼り付け,
Githubのユーザーとパスワードを入力します。
clone1

「セキュアストアに保管」にチェックを入れると毎回入力しなくてよいです。

そして、間違いがなければ下のように対象になるブランチが表示されますので、次へ進みます。
clone2

クローンする場所(ローカルリポジトリ)は下のような場所に設定しました。サブモジュールのクローンにチェックを入れ忘れないようにしてください。 ※今回は、サブモジュールがないので関係ありませんが。。。
clone3

クローンの完了です。
clone4
workspace2

Javaのソース配置

ここまで来たらJavaコードを書きたいのですが、パッケージなどの配置先をどのようにするか?を決めないといけません。
とりあえず、プロジェクトがJavaプロジェクトになっていないのでMavenプロジェクトに変更し、パッケージ構成を作成します。

  1. プロジェクトを右クリック
    構成 > Mavenプロジェクトへ変換

  2. 「src/main/java」と「src/test/java」というフォルダができるのでそれぞれ、メインの実装、テストクラスの実装用に使用する
    maven1

  3. パッケージを作成し、その配下にJavaソースを作成、とりあえずはHello Worldを実行して問題なくJavaを起動できることを確認
    ResultHelloWorld

JavaFX

JavaFXを使用してGUIアプリを作成したいと思ったときにjfxrt.jarがビルドパスに含まれてない場合があるようです。自分の場合は下のように解決しました。
「プロジェクトを右クリック⇒プロパティ⇒Javaのビルドパス」を開きます。
次に、「外部JARの追加をクリックして下のようにjfxrt.jarをビルドパスに追加します。

Jfxrt.jar

これで、動けばよいのですが最近ではJavaFXに関してGluonがメインで配布しているようで。。。

Setting Junit

JUNITの設定を行います、単純にjunit.jarをビルドパスにつなげるだけです。
しかし、ライブラリがあるのでそれを設定するほうが楽です。

  1. プロジェクトを右クリック -> プロパティ、もしくはAlt + Enterでプロジェクトの設定を開きます。
    projectProperty

  2. ライブラリの追加をクリック
    elipseAddLibrary

  3. JUnitを選択(選択後の画像です)
    elipseJunit5

  4. JUnit追加後
    eclipseAfterJunit
    プロジェクトにJUnitが追加されています。
    eclipseAfterJunit2

カバレッジを使用する

JUnitでテストを実行した後に、テストケースが網羅できているかの確認をしたいときに使えます。
今回のセットアップでは、すでにカバレッジ(プラグイン)が入っていたので、実行手順を示します。

ちなみに、プラグインの追加方法は以下

Junitでカバレッジを取得する
1.まずはeclipseを起動し、「ヘルプ」→「Eclipseマーケットプレース」を選択します。
2.Eclipseマーケットプレースのウィンドウが開くので、検索欄にEclEmmaと入力し、「Go」ボタンを押下してください。
検索結果にEclEmmaが表示されるので、「インストール」ボタンを押下してインストールします。

カバレッジ起動方法
  1. テストクラスを右クリック
    coverage

  2. JUnitテストを(実行)

実行構成は下の「カバレッジの構成」を選択します。
coverageConf


関連ページ一覧

Eclipse セットアップ(Mac版)

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜

ラズパイ設定 ~リモートデスクトップ,ウェブサーバー構築,JavaFX~

イントロダクション

シングルボードコンピューター、ラズベリーパイをご存じの方は多いと思いますが、知らない人のために簡単に「こんなものもです」という動画を引っ張ってきました。以下のものは、サンプルです。
用途その1:ロボットを動かす

用途その2:ゲーム機にする

用途その3:メディアプレーヤーにする

用途その4:ウェブサーバーにする

今回のやりたいこと

表題の通りに、以下の設定を行いました。

  1. ラズパイにリモートデスクトップでアクセスできるように設定
  2. ラズパイを起動したときにウェブサーバーが起動する ※インストール時に、自動起動する設定を行ってくれるようなので、実際にやったことは、インストールとPHPの設定のみ。

ちなみに、コマンドでOSを終了するときは以下のコマンドです。

sudo shutdown now

Index

  1. ラズパイにリモートデスクトップ接続
  2. ラズパイのセッティング
  3. ウェブサーバーのインストール
  4. PHPのインストール
  5. ウェブサーバー(Apache2)の設定
  6. ウェブサーバー(NGINX)の設定
  7. Javaのインストール
  8. Wifiの設定
  9. iPhoneをルーターの代わりにする
  10. MavenのインストールとJavaFXのインストール

ちなみに以下のアプリ(コマンド)はインストール済みでした。

ハマったところ

ブラウザにキャッシュが残っていて、修正自体は問題ないが、修正が反映されていない事件があったので
「おかしい!」と思ったらブラウザの履歴を削除してみるのもよいと思います。

テキストエディタNano

nanoコマンドでのテキストエディタをお勧めします。
その理由は、操作方法法が下に表示されているから。。。
nano

終了するのはウィンドウズのキーボードならcntroll + Xで終了になります。
つまり「^」はcontrollボタンに相当するわけです。

行番号の表示

修正対象ファイル:/etc/nanorc

set linenumbersのコメントアウトを解除する

Access RPi

ラズパイにリモートデスクトップ接続する方法
こちらのサイトを参考に実行してみました。

RPi Setting

ラズパイのセッティングを行います。

  1. ラズパイを起動して、コマンド画面(Terminal)を開きます。

  2. 以下のコマンドを入力、Enterを押下

    sudo apt-get install tightvncserver -y

    コマンドの実行中にy/nの入力を求められるので「y」を入力します

  3. 同様に以下のコマンドを入力

    sudo apt-get install xrdp
  4. 上のコマンド実行が終わったら、ラズパイの使用しているネットワークとIPアドレスを調べます。※192.168.0.10とあります。
    具体的には、下のような形で確認、メモします。
    ifconfig

    • Terminalで「ifconfig」とコマンドを入力すると上のように表示されるので、以下のパターン別に見分けます。
      1. LANケーブルの場合: eth0:の部分にある「inet」をみる。ちなみに上のキャプチャはWifi接続なので「inet」の部分がありません。
      2. Wifi接続の場合: wlan0:の部分にある「inet」をみる。キャプチャには接続しているので「inet」があります。そして「192.168.0.12」と表示されています。これをメモリます。
  5. 改めてWindowsを立ち上げ、ラズパイは、ディスプレイを接続しない形で、再度立ち上げなおし(起動しなおし)「アクセサリ -> リモートデスクトップ接続」のようにアプリを起動します。

  6. 下のような画面が出るので先ほどメモしたIPアドレスを入力します。

    RPiSetting

そして接続してみると下のような画面が見れます。
remoteDesk

これで、今後ラズパイ用ののディスプレイ、キーボードなどを用意しなくても、Windowsからリモートでラズパイを操作することができます。一応ですが、
ラズパイの電源は入れ、ネットワークの接続を行う必要があります。

Install Web Server

ウェブサーバーのインストールを行います。参考サイトはこちら

しかし、Raspberry Pi Imagerでインストールしたもの(OS)には、Apacheが初めからインストールされているようで、さらにラズパイ起動時にウェーブサーバーも起動してくれるようになっていたんで今更インストールしなくてもよいかもしれません。。。

  1. 以下のコマンドを叩きます(入力してEnter押下)
    sudo apt-get install nginx

    インストールが終了したら。。。

  2. 下のコマンドでサーバーを起動します。※自分の場合はインストールしたら起動していました。。。
    sudo /etc/init.d/nginx start

    ブラウザで「localhost」と入力すれば確認できます。
    WebServer

逆に停止するときは下のコマンドです。

sudo /etc/init.d/nginx stop

インストールした時点で、自動起動する設定も反映されるようなので、もともと入っているApacheを使用しなくてもよいようです。

Install PHP

みんながよく使用するので(ウェブ系の人々)一応インストールします。あわよくばWordPressもインストールしようか?と思っています。
シンプルに以下のコマンドでインストールできるようです。

sudo apt-get install php
php -v # phpのバージョンを確認後「X」にバージョン番号を対応させる
sudo apt install phpX.X-mbstring

インストールの確認は以下のコマンド

php -v

Setting Apache

ウェブサーバーを起動した後に、自分の作成した画面を表示できるように設定を行います。
そして、以下のパッケージ?が必要なようですのでインストールします。※参考サイトより

sudo apt install apache2-dev # PHP動かすのに必要(と思う)

まずは、サーバーの起動確認

ラズパイの80番ポートを使用しているアプリの確認を行うコマンド。※80の部分を8080に変更すれば、8080晩ポートの確認ができる

nc -v -w ラズパイのIPアドレス -z 80

そして、ブラウザでIPアドレスにアクセスしてみると下のように表示されました。
ApacheView

Apache起動と停止コマンド

# 起動
$ sudo service apache2 start
# 停止
$ sudo service apache2 stop
# 再起動
$ sudo service apache2 restart // エラーが出る場合がある

# エラーが出る場合は、stopとstartを別々に動かす方法もある

# 強制的に設定を再読み込みする
sudo /etc/init.d/apache2 force-reload

エラーになったときの対処

エラーメッセージの中に下のような文言があるはず。。。

See systemctl status apache2.service

このコマンドを叩いてみると詳細な情報が表示されました。
自分の場合は下のように叩きました。

sudo systemctl status apache2.service

どうやらIPアドレスがバインド (関連付け)されていないようでした。。。
そして、初めにインストールしたNGINXがポートを使用していたためバインドできないエラーが出ていました。下のコマンドで確認しました。つまるところApacheではなくNGINXが動いていた。。。ということでした(笑)

sudo netstat -tlnp

設定の変更

ファイルを修正する前には必ずバックアップを取りましょう

  1. 修正対象ファイル: /etc/apache2/apache2.conf
    バックアップを取るのには以下のコマンド

    # cp コピーするファイル コピー後のファイル
    cp /etc/apache2/apache2.conf /etc/apache2/bakup.apache2.conf

エラーページの設定
下のような文字列を追記する

<VirtualHost *:80>
    # 404エラーのとき、/error/404.htmlを表示する
    ErrorDocument 404 /error/404.html
    ErrorDocument 403 /error/403.html
</VirtualHost>
  1. 修正対象ファイル: /etc/apache2/site-available/000-default.conf

    <VirtualHost *:80>
        # /var/www/htmlディレクトリをドキュメントルートとする設定
        DocumentRoot /var/www/html  
    </VirtualHost>

    デフォルト(初期)設定で上のようになっているのでそのままにしようと思います。。。

  2. PHPの設定を行う
    PHPのインストールを確認後に作業してください
    以下のコマンドを実行します。使用している(インストール済みの)PHPのMODを下のコマンドで「php~.load」があるか確認してください、なければa2enmodコマンドで有効にしてください

    ls -l /etc/apache2/mods-enabled

    有効にするモジュール(MOD)

    sudo a2enmod rewrite
    sudo a2enmod suexec
    sudo a2enmod include
    sudo a2enmod fcgid
  3. 修正が終わったらサーバーを再起動します。

    $ sudo service apache2 stop
    $ sudo service apache2 start

Setting Nginx

Apacheの時と同様に、PHPの設定を行います。
ドキュメントルートはApacheと同様なので、割愛します。

PHPの設定

PHPを使用するのにphpX.X-fpmを使用するようなので今回は下のようにインストールしました。

sudo apt-get install php7.3-fpm

設定ファイルの修正

参考サイト
修正対象ファイル: /etc/nginx/sites-enabled/default

  • 下のようになっている行を

    index index.html index.htm;

次のように修正

index index.php index.html index.htm;

そしてPHP部分の修正、下のようになっている所の{}のなかを

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
# location ~ \.php$ {

下のように修正

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
        include snippets/fastcgi-php.conf;

# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# With php-cgi (or other tcp sockets):
#fastcgi_pass 127.0.0.1:9000;
}

そして、下のようなエラーが出る場合「nginx.conf」or「nginx/sites-enabled/default」
のファイルに下のような文字列が記述されているのでどちらかをコメントアウトします。
ちなみに自分の場合はdefaultの方を修正しました。

#listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;

phpExe

Install Java

Javaのインストール配下のコマンドでOK、下のようなコマンドでインストールを行います。
参考サイトはこちらです

sudo apt install default-jdk

しかし、インストールされるのはOpenJDK11, 8なのでネットワーク環境の良いところで実行してください。
でないと、自分のように何時間も待つ羽目になります。。。

そして、実行してみたところ上のコマンドの次に

sudo apt install openjdk-8-jdk

を実行し、使用するJDKの選択を行う必要がありました。

sudo update-alternatives --config java

alternatives

そして、JDK8を選択、javaコマンドが起動できました。
JavaCommand

Wifi Setting

Wifiの設定を行います。
参考サイトはラズパイのページです。

wifiの接続先検索コマンド
  1. ifconfigコマンドで、「wlan」という文字列を探します。
  2. おそらく「wlan0」という文字列が見つけられるので、それを確認
  3. 以下のコマンドを叩く

    sudo iwlist wlan0 scan

これで、接続できるSSIDの一覧を取得できます。

wifiの接続先候補リスト
/etc/wpa_supplicant/wpa_supplicant.conf

上のファイルに接続先候補が記述されています。
なので。。。

wifi接続先候補の確認

以下のコマンドを叩きます。

cat /etc/wpa_supplicant/wpa_supplicant.conf

そしてこれを編集したいときは

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

しかし、これは新しい接続先に画面から接続したらプログラムがこのファイルに書き込んでくれるので「不要なものを削除する」のがメインになりそうです。

Use iPhone for router

iPhoneをルーター代わりにする
ラズパイ上のウェブサーバーを起動しても、ネットワークがつながらないと、話になりません。
そこで、携帯をルーターの代わりにする方法を記載しておきます。

  1. 設定をタップ

  2. インターネット共有をタップ

  3. インターネット共有をONにする

  4. ちょっと待つ

これで、iPhoneをルータの代わりにできます。あとは、ラズパイでiPhoneにwifi接続してやれば、ウェブサーバーにアクセスできます。通信費は携帯のものを使用するので注意が必要です。

Install Maven JavaFX

Mavenのインストール
こちらの記事にも記載しましたが、下のコマンド一発でインストールできます。

sudo apt-get install maven

JavaFXのインストール
参考サイトはこちら
そして、apt-get instll でインストールしたのなら

/usr/lib/jvm

以下に、JDKがインストールされているはずです。

  1. JDKのインストール

    sudo apt update
    sudo apt install openjdk-8-jdk

  2. JDKの確認と選択

    sudo update-alternatives --config java

  3. /etc/environmentファイルを修正する

    JAVA_HOME="javaのインストールしているパス"

具体的には下のようにJDKを確認・指定します。

そして、

sudo nano /etc/environment

でファイルに以下の文字列を書き込みます。

JAVA_HOME="usr/lib/jvm/java-8-openjdk-armhf/jre/bin/java

  1. GluonからJavaFX SDKをダウンロード
    このページからダウンロードできます。そしてダウンロードしたら適当な場所に解凍します。自分の場合は、ダウンロードフォルダに解凍しました。
    以下のように配置(インストール)するようです。
解凍したフォルダ(コピー元) JDKのパス(コピー先)
armv6hf-sdk/rt/lib/ext/jfxrt.jar jre/lib/ext/
armv6hf-sdk/rt/lib/arm/* jre/lib/arm/
armv6hf-sdk/rt/lib/javafx.platform.properties jre/lib/
armv6hf-sdk/rt/lib/javafx.properties jre/lib/
armv6hf-sdk/rt/lib/jfxswt.jar   jre/lib/

実行結果

これで、GithubからPULLしたソースをビルドできる

mvn install

しかし、リモートデスクトップ接続の状態ではXサーバーの問題でうまく動かないようです。

<未解決>
ラズパイを単体で起動、確認してみます。

でわでわ。。。

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜

AtomでのGit clone~clone is not available in present state~

clone is not available in present state

Atomで以下のような操作を実行したときに表題のエラーが出ました。

ちょっと調べてみたら、Atomでうまくいかないことがあるようです。

面倒なのでgitコマンドでやったほうが早そうです。

gitコマンドを使う

Git install

  1. Gitのサイトからアプリをダウンロードします。
  2. インストーラがダウンロードできるので、そのままインストール(ダブルクリック)

    ※インストール画面ではすべてデフォルトでOK(そのまま次へ)
  3. インストールが終わったら、ウィンドウズボタン+Rでコマンドプロンプトを開きます。
    + R
  4. そしてgitコマンドでインストール確認
    git -V

リポジトリのクローン

これは自分の場合です。
コマンドプロンプトを立ち上げたらCドライブにいるので(カレントディレクトリがCドライブなので)以下のコマンドでDドライブに移動します。

  1. インストールしたgitに環境変数を設定します。(パスを通すなどと言ったりします。)
    コントロールパネルを開き、検索部分に「環境変数」と入力すると候補が出てくるので「環境変数」を選択します。
    そして、自分(ウィンドウズユーザー)だけで使用するのなら「ユーザー環境変数」
    このPC全体で使用するのならシステム環境変数に設定します。
  2. Github(ウェブサイト)に作成したリポジトリ(リモートリポジトリ)のURLをコピーして、ローカルリポジトリへ(自分のPCへ)クローンします。
    • ローカルリポジトリを配置するディレクトリに移動
      cd D:\privateDocs\MyDoc
    • git clone リモートリポジトリのURL
  3. リポジトリをクローン出来たか確認

想定では、MyDocディレクトリをリポジトリとして使用したかったのですが、このディレクトリにリポジトリが作成されました。。。
まぁ、よしとして続けます。
今まで作成したドキュメントをコミットしたいのでこれらのファイルをリポジトリのディレクトリに移動します。
すると下のように、UnstagedとかStagedの文言を見ることができます。

これらを選択、右クリックすると下のような画面が見れます。

そして、Stageを選択、コミットします。

すると、下のエラーが出ました。

GitError

上のエラーに対する対応を行います。結論から言うとユーザー情報が設定されていないので、それを設定します。コマンドは以下の通り

git --global user.email "自分のEメール"
git --global user.name "Githubのユーザー名"

これで、コミットができました。しかし、これではローカルリポジトリに登録されただけなので、PUSHしてリモートリポジトリへ登録してやる必要があります。

git push

その実行結果が下のようになります。※Githubとコマンプロンプトを重ねてキャプチャしました。
AfterPush

コマンドのみでコミット

  1. 「git status」で未コミットファイルを確認
  2. 「git commit」で全体のコミット ※今回はファイル一つなので後ろにファイルのパスをつける
  3. 「git commit -m "メッセージ"」コミットコメントをつける、上のものと使い分けるようにする
  4. コミットしたらあとはPUSH

実行結果

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜

SDカードの容量が少ない~SanDiskの場合~

事の始まり

SanDiskの64GBを購入しリムーバブルディスクとして使用しようとしたが、使用可能領域が256MBに。。。

おかしいと思い調べてみると、ほかにも似たようなことになっている人がいる模様。
こちらのサイトで調べてみたところそれ用のフォーマッター(アプリを使用する必要があるようだった)

解決策

  1. こちらのサイトからアプリをダウンロード
  2. インストーラを起動
    Formatter Install
  3. SDカードのフォーマット
    Format_SD
  4. 無事にフォーマットでき、カードのデータ量も適切なものが表示されました
    After

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜