0

次のコードを書きました。

private void Button_StartMouseClicked(java.awt.event.MouseEvent evt) {                                           
            java.util.Timer().schedule( 
            new java.util.TimerTask() {
                @Override
                public void run() { 
                        Find(word_from_textfield); 
                }
            }, 
            10
    );
    }

public void Find (String word) {

    String[] array_files = new String[100];

int j;        
for (j=0; j<array_files.length; j++) {
if (array_files[j] != null) {   

        if (array_files[j].contains("1")) {
            function1 (  array_files[j], word ); // function1() prints some line on a textpane
         } 

        else if (     array_files[j].contains("2")   ) 
        {
        function2 (  array_files[j], word); // function2() prints some line on a textpane
        } 

        else if (     array_files[j].contains("3")    ) 
       {
        function3 (   array_CARTELLE[j], word  ); // function3() prints some line on a textpane
        } 

       }            
}        
} 

Find() 関数を a 内に配置しましたTimerTask()。ご覧のとおり、関数はテキストペインにいくつかの行を追加する他の関数を呼び出し、いくつかのチェックを行います。

その結果、私のプログラムはこれらの行を 1 行ずつ出力し、各行は数ミリ秒後に前の行の後に出力されTimer().schedule()ます。

を使用せずに Find() メソッドを呼び出そうとしましたTimer。その結果、私のプログラムが実行され、Find() メソッドを呼び出したときに一時停止し、その後、すべての行が同時に出力されました。

なぜそれが起こったのかを理解したいと思います。つまり、使用することを選択したときTimer().schedule()、Find() メソッドは 10 ミリ秒後に実行されると予想していましたが、その後はプログラムをフリーズすることなくすべての行を同時に出力することになりましたが、行が表示されるとは思っていませんでした。さまざまな瞬間に 1 つずつ印刷されます。

だから私は知りたい:

  • を使用してそのような動作をした理由Timer().schedule()

  • また、Find() メソッドの実行中にプログラムが一時停止した理由。

4

0 に答える 0