AndroidでコンソールJavaアプリケーションを起動します





これは、Javaを勉強していて、フィールド(地下鉄、ミニバス、カフェなど)でサンプルコードの作業を表示するために常にPCを持っているわけではない人に役立つユーティリティプロジェクトになります。



OCJP認定の準備をしていたときに、この共有を作成する必要が生じました。 それを正常に完了した後、レビューのためのアイデアの成果を尊敬されるhabrasocietyのメンバーに提供することにしました。



私はラップトップを持っていないので、お茶を飲みながらキッチンに座ってスマートフォンでコード例を実行すると便利です。



たまたま、ほとんどのトレーニング例は通常、コンソールプログラムの形式で提供されています。 素晴らしいAIDEツールを使用すると、Eclipseプロジェクトに基づいてAndroidアプリケーションを構築できます。 残念ながら、コピーアンドペースト方式を使用してコンソールの例を実行するには機能が不十分です。



ポイントは小さい-I / OフローをUIコントロールにリダイレクトする:



private static OutputStream mOutputStream = new OutputStream() { @Override public void write(int b) { MainActivity.getInstance().write((byte)b); } }; @Override public void onCreate(Bundle savedInstanceState) { ... System.setOut(new PrintStream(mOutputStream)); System.setErr(new PrintStream(mOutputStream)); ... }
      
      







コンソールプログラムは、アクティビティonResume()



ハンドラーとは別のスレッドで開始されます。



  @Override public void run() { try { // //     // Program.main(new String[0]); } catch (Throwable ex) { //      setErrorColor(); ex.printStackTrace(); } }
      
      







ここでは、コマンドライン引数-古き良き引数を指定できます。 例BankTellerSimulation



を10秒間開始する:



 BankTellerSimulation.main(new String[] { "10" });
      
      







いくつかのスレッドの作業がサポートされています( SimpleThreadsTest



):







HorseRace



BankTellerSimulation



は、より複雑なマルチスレッドアプリケーションの例です( Thinking in Javaの4th Ed by Bruce HorseRace



からBankTellerSimulation



)。



ランタイムエラー


ErrorTest



例:



 class FuuuuuuException extends RuntimeException { public FuuuuuuException(String message) { super(message); } } ... throw new FuuuuuuException("!!!TROLLFACE!!!");
      
      







例外が発生します:







入る


最後に、完全を期すために、コンソール入力が追加されました。 これまでのところ、Androidユーザーインターフェースに関する私の知識はあまり良くありません。 どういうわけか私はEditText



をプッシュすることができましたが、結果は完璧ではありません:)



行入力プロンプト( ReadingInputTest



):







次:







メニュー機能


Exitは、 System.exit(0)



介してプロセスをシャットダウンします。



「ワンタイム」プログラム。 再起動が繰り返されることはありません(静的フィールドの値のクリーニングに煩わ​​されたくありませんでした)。



クリアを大きな秘密にしたもの。



動作しないもの


•のJavaをassert



ます。 つまり オペレーター



 assert "Cat".equals("Dog");
      
      





例外java.lang.AssertionError



はスローされません。 JUnitのアサーターと混同しないように-すべては問題ありません!)

Console



クラス。

•入力フィールドが常にフォーカスをキャッチするとは限りません。



プロジェクトファイル


ソースはGitHubから取得するか、Android StudioおよびEclipse用のプロジェクトを含むzipアーカイブをダウンロードできます。



説明されている例はcom.examples



パッケージにあります。 すべての例は、通常のPCで変更なしで実行できます(どこでも実行できます!)。



All Articles