1

readline() の使用に関して問題があります。メインクラスからの単一のinputStreamがあります

          private  String url = "BoardLayoutSet/01_basic.templete";
          private InputStream boardName  = getResources().getAssets().open(url);
          Board b = new Board(boardName);

そして、この "boardName" is InputStream を "Board" クラスに送ります。この Board.class には、以下のコードのようなコンストラクターがあります

     public Board(InputStream boardName) throws IOException{                    
     int[] d = LayoutDimensions(boardName); //<----First,use InputStream         
    ....
             ......      
     build(null, boardName); //<<--Second,Use InputStream                
   }

最初のメソッドは、このコンストラクターによって呼び出されます (上記)。最初の方法は、このように「InputStream」を使用します(以下)

  public  int[] LayoutDimensions(InputStream boardName) throws IOException {        
    BufferedReader reader1 = new BufferedReader(new  InputStreamReader(boardName));     
    L1 = reader1.readLine(); // #Basic
    L1 = reader1.readLine(); // %Level 1
    L1 = reader1.readLine(); // space line
    L1 = reader1.readLine(); // First row of board
    for (int i = 0; i < L1.length(); i++) {
        if (L1.charAt(i) != ' ') {
            x++;
        }
    }
    System.out.println(L1);
    System.out.println("Width(x):" + x);
    // ////////////////
    boardName.reset();
    BufferedReader reader2 = new BufferedReader(new InputStreamReader(boardName));
    L2 = reader2.readLine(); // #Basic
    L2 = reader2.readLine(); // %Level 1
    L2 = reader2.readLine(); // space line
    L2 = reader2.readLine(); // First row of board

    while (L2.length()!=0) {
        System.out.println(L2.charAt(0));
        y++;
        L2 = reader2.readLine();
    }
    System.out.println("Height(y):" + y);
    .....
            ......

    reader1.close();
    reader2.close();
    reader3.close();

    return dimensions;

    }

1 つの方法のみを使用すると、機能します。次に、このように Second メソッドを呼び出す必要があります

   protected  void build(Random r1, InputStream boardName) throws IOException {



    if (r1==null) {
        long seed = new Random().nextLong();
        r = new Random(seed);
    } else {
        r = r1;
    }


    tTile = new Tile[depth][height][width];
    int x;
    int y;
    int z=-1;

    BufferedReader buffer = new BufferedReader(new InputStreamReader(boardName));

    String L=null;
    buffer.reset();
    L = buffer.readLine();  //Basic 
    .......
            ......
            ......

この行からエラーです>> L=buffer.readLine(); 順序を入れ替えようとしました: 最初の方法の前に 2 番目の方法を使用します。2番目は使用できますが、最初の方法はエラーです。Inputstream の問題だと思うので、2 つの Inputstream を作成しようとしましたが、うまくいきません。

4

1 に答える 1

1

メソッド LayoutDimensions で入力ストリームを既に閉じているようです。

これ

reader1.close();
于 2013-04-26T10:35:28.173 に答える