1

私の学校のプロジェクトでは、Bad Apples for iPhone のようなゲームを作成しています (私の個人的な選択ではありませんが、問題ではありません)。

ゲームには 2 つのバージョンが必要です。1 つ目はコンソール用、2 つ目は JavaFX 用です。しかし、私はそれをもう少し進めたかったのです。たとえば、ゲームの起動時にユーザーが端末に追加できる引数を追加したい

java -jar BadApplesClone.jar --height=10 --width=10 --numPieces=5

そして、導入されたすべての値を処理し、変数を変更します。

私はOpenJDK6を使用しているので、今のところ次のようにしています:

    for (int i=0; i<args.length; i++)
    {
        if (args[i].equals("--help"))
            throw new UnsupportedOperationException("Not yet implemented");

        if (args[i].equals("--largura"))
            throw new UnsupportedOperationException("Not yet implemented");

        if (args[i].equals("--altura"))
            throw new UnsupportedOperationException("Not yet implemented");

        if (args[i].equals("--pecas_inicio"))
            throw new UnsupportedOperationException("Not yet implemented");

        if (args[i].equals("--javafx"))
        {
            JavaFX javaFX = new JavaFX(ALTURA, LARGURA, PECAS_INICIO);
            javaFX.initJogo();
        }
    }

しかし、 --width=10. のような値を処理する方法がわかりません。列挙型を考えましたが、その方法がよくわかりません。

誰でもこれを達成する方法を説明できますか?

4

4 に答える 4

2

外部ライブラリの使用が許可されている場合は、Apache Commons CLIを確認してください。これにより、車輪を再発明する必要がなくなります。

于 2012-05-24T21:54:43.903 に答える
2

あなたが実際に尋ねた質問に答えるために...

args 配列の要素の一部は、「--SOMETHING=ANOTHER」の形式になっています。

したがって、最初に必要なものは次のとおりです。

if(args[x].startsWith("--SOMETHING")) { 

2 番目の問題は、ANOTHER を解析することです。

args[x].split("=") 

そこからスタートです。

于 2012-05-24T22:25:25.863 に答える
1

JavaFXを使用している場合getParametersは、Applicationクラスのメソッドを使用できます(ただし、コンストラクターでは使用できません)。コマンドラインからもjnlpファイルからも両方のパラメーターを処理します。

public final Application.Parameters getParameters()

コマンドラインで渡された引数や、アプレットまたはWebStartアプリケーションのJNLPファイルで指定されたパラメータなど、このアプリケーションのパラメータを取得します。注:このメソッドはnullを返すため、Applicationコンストラクターから呼び出さないでください。これは、init()メソッドまたはその後いつでも呼び出すことができます。

http://docs.oracle.com/javafx/2/api/javafx/application/Application.html#getParameters()

詳細については、返されたオブジェクトのドキュメントを参照してください:http: //docs.oracle.com/javafx/2/api/javafx/application/Application.Parameters.html

名前付きと名前なしの両方を処理します(もちろん、常に生のパラメーターを取得できます)。

Map呼び出しから取得しgetNamed()、JNLPファイルで明示的に指定されたペアを含む名前付きパラメーター。また、次の形式のコマンドライン引数も含まれます: "--name = value"

Listを呼び出すことで取得する名前のないパラメーターgetUnnamed()は、コードで今日すでに処理している単純なパラメーターです。つまり、名前付きパラメーター、つまりペアとして表されるパラメーターは、このパラメーターから除外されますList

于 2012-05-24T21:56:06.660 に答える
1

JavaFX とコマンド ライン パラメーターに関する興味深い議論が、このブログ投稿の Exploring JavaFX 2 - Accessing application parametersにあります。著者は、「Application.getParameters()をトランスポーターとして機能させ、Apache Commons CLI にパラメーターを取得するように依頼する」ことを推奨しています。これは、解析されたパラメーターではなく生のパラメーター データを取得することを意味します。

getParameters().getRaw().toArray(new String[getParameters().getRaw().size()])

これにより、パラメーターが JavaFX の例に変換され、コマンド ライン アプリから取得したのと同じ種類の String 配列に変換されます。その後、共通の関数を使用してパラメーターの解析を処理できます。

プロジェクトでApache Commons CLIを使用できない場合は、 getParameters().getRaw().toArray(JavaFX モードで) 呼び出しから取得したパラメーターまたはmain()渡された引数に基づいて解析を共通関数で処理する基本的なパラメーター パーサーを自分でアプリに実装できます。アプリ (コマンド ライン モード)。

于 2012-05-24T22:07:21.053 に答える