0

URL(自分のFTPサーバー)からファイルをダウンロードするアプリケーションを作成しています。問題は、[ダウンロード] ボタンをクリックすると、アプリケーションのダウンロードが開始されますが、ダウンロード時にアプリケーションが応答せず、ダウンロード後にすべて正常に動作することです。

ここに私のコードの一部があります

GUI クラス

b_Download.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                       String username = "Test";
                       startDownloading(username);
            }   
        });

private void startDownload(String username)
    {
        downloader.println("Welcome " + username); //println will show text in a textpane(GUI) and console
        downloader.startDownloading();
    }

Downloader.class

public void startDownloading()
{       
                println("Download jobs started");


                download.downloadLIB();    
}

ダウンロードJob.class

public void downloadLIB()
    {
        launcher.println("Start downloading files from server...");
        String libURL = "http://www.example.com/file.jar";
        File libFile = new File("C://file.jar");
        downloadFile(libURL, libFile, "file.jar");
    }
public void downloadFile(String url, File path, String fileName)
    {
        InputStream in = null;
        FileOutputStream fout = null;
        try
        {
            in = URI.create(url).toURL().openStream();
            fout = new FileOutputStream(path);

            byte data[] = new byte[1024];
            int count;
            while ((count = in.read(data, 0, 1024)) != -1)
            {
                fout.write(data, 0, count);
            }
        }
        catch(Exception e)
        {
            launcher.println("Cannot download file : " + fileName, e);
        }
        finally
        {
            if (in != null)
                try
                {
                    in.close();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            if(fout != null)
                try
                {
                    fout.close();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            launcher.println("File " + fileName + " downloaded successfully");
        }
    }

「ダウンロード」ボタンを押すと、テキストペインに「Welcome Username」という単語が表示され、応答がありません。しかし、コンソールには「Welcome Username」、「Download Jobs started」、「Start download files from server...」という単語が表示されます。数分後 (ファイルのダウンロードが完了すると、アプリケーションは再び応答を開始します...

4

2 に答える 2

0

新しい を生成する必要がありますThread

ネットワークにリクエストを送信すると、サーバーが探しているものを取得するまでハングするコードを実行します。これは、アプリのメイン スレッドがシステム メッセージに応答しない部分があり、システムが応答を停止したと見なすことを意味します。

これに対する解決策は、ワーカー スレッドを生成するか、サービスを実行してネットワーク リクエストを処理することです。

サーバーを待機している間、スレッドはハングしますが、ユーザーはメイン アクティビティ スレッドを操作し続けることができます。

ワーカー スレッドがタスクを完了したら、メイン スレッドにコールバックして、ダウンロードの進行状況/完了をユーザーに警告する必要があります。

于 2013-09-29T07:39:39.853 に答える