0

GUI プログラムを作成しており、例外をスローするメソッドを呼び出しています。GUI のためコードを編集できないため、トライ アンド キャッチを使用する必要があります。何らかの理由でコードが機能しません。このコードは、ファイルの最初の行を取得し、その番号をラベルに表示することになっています。コードは次のとおりです。

    try{  
       String inputStr = JOptionPane.showInputDialog(this, "Enter The File Name: ");
       int x= codeReadFile(inputStr);
       String name= String.valueOf(x);
       chipCount.setText(name);
    }
    catch (IOException e) {
         JOptionPane.showMessageDialog(this,"No File");

    }    

ファイル読み取りプログラムのコードは次のとおりです。

      public static int codeReadFile (String filename) throws IOException, 
      FileNotFoundException {
      String line=null;
      int value=0;
      BufferedReader inputReader = new BufferedReader (new 
            InputStreamReader(new FileInputStream(filename)));
            while (( line = inputReader.readLine()) != null)
                value = Integer.parseInt(line);
                inputReader.close();
                return value;
4

2 に答える 2

1

ファイルの最初の行を取得したいとおっしゃいましたが、このコードは明らかにそれを行いません。

while (( line = inputReader.readLine()) != null)
  value = Integer.parseInt(line);

ファイル全体を読み取り、すべての行をとして解析しようとしint、最後を除くすべての値を破棄します。あなたがおそらく言いたかったのは

line = inputReader.readLine();
return line != null? Integer.parseInt(line) : 0;

ファイルに実際に1行しか含まれていないかどうかに関係なく、このようなコードが必要です。たとえば、ファイルに余分な改行が含まれている場合は、空の行を読み取り、それを解析して、を取得しNumberFormatExceptionます。

于 2012-12-11T19:45:07.853 に答える
0

GUI 操作は、常に EDT (イベント ディスパッチ スレッド) で呼び出す必要があります。変更コードを sth にラップすることで、これに到達できます。お気に入り:

SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                chipCount.setText(name);
            }
        });

そうしないと、醜いことが起こるかもしれません;)

次に、を取得する簡単な方法もありますBufferedReader。単にストリームをドロップして、FileReader代わりに a を使用してください。

最後に、ファイルに 1 行しか含まれていない場合は、1 行だけ読み取ります。あなたがしていることは、すべての行を読むことです。最後のものが空の場合、間違った結果が得られたり、 NumberFormatException by parseInt().

別のアプローチとして、テキストを設定した後に、または chipCount および/またはその親を呼び出すことを試みることができrepaint()ますinvalidate()編集: それをラベルに表示したいということを読みました...その後、再描画が間違いなく進むべき道です。JTextFieldこれを取り除くために、 a を使用して編集不可にすることもできます。

于 2012-12-11T19:19:19.983 に答える