java مشاريع كيفية استخدام جبروغسبار؟




مشاريع جافا swing (3)

أنا بحاجة لتحميل مجموعة من الكلمات (حوالي 70،000) من ملف نصي، إضافته إلى هاشتابل (باستخدام سوندكس كمفتاح) وفرز القيم. أثناء القيام بكل هذه أريد أن تظهر شريط التقدم باستخدام جبروغسبار. مقالات مثل هذا وهذا ، يعطي سوى مثال غير حقيقي (حلقة في حين). هل يمكن لأي شخص أن يقترح لي كيف ينبغي المضي قدما. كيف يمكنني الحصول على رقم من شرط أعلاه لتعيين قيمة شريط التقدم؟ كما يبدو أن هناك طرق مختلفة للقيام بذلك - باستخدام موضوع، الموقت الخ التي يمكن أن تكون أفضل طريقة للحالة مثل أعلاه؟


الحصول على حجم الملف وحساب وحدات البايت التي تمت معالجتها على كل تكرار. وبهذه الطريقة، لم يكن لديك لدورة من خلال الملف مرتين.



أود قراءة الملف النصي في حلقة على مؤشر عمل مخصص، وليس موضوع إيفاد إيفاد الحدث (إدت). إذا كنت أعرف العدد الإجمالي للكلمات التي يجب قراءتها، ثم يمكنني حساب النسبة المئوية المكتملة في كل تكرار حلقة وتحديث شريط التقدم وفقا لذلك.

عينة من الرموز

تقوم التعليمات البرمجية التالية بوضع شريط التقدم في وضع غير محدد أثناء المعالجة المسبقة و بوستبروسيسينغ، مع عرض رسوم متحركة تشير إلى حدوث العمل. يتم استخدام وضع تحديد عند القراءة التكرارية من ملف الإدخال.

// INITIALIZATION ON EDT 

// JProgressBar progress = new JProgressBar();
// progress.setStringPainted(true);

// PREPROCESSING

// update progress bar (indeterminate mode)
SwingUtilities.invokeLater(new Runnable()
{
    @Override
    public void run()
    {
        progress.setIndeterminate(true);
        progress.setString("Preprocessing...");
    }
});

// perform preprocessing (open input file, determine total number of words, etc)

// PROCESSING 

// update progress bar (switch to determinate mode)
SwingUtilities.invokeLater(new Runnable()
{
    @Override
    public void run()
    {
        progress.setIndeterminate(false);
    }
});

int count = 0;

while (true)
{
    // read a word from the input file; exit loop if EOF

    // compute soundex representation

    // add entry to map (hash table)

    // compute percentage completed
    count++;
    final int percent = count * 100 / total;

    // update progress bar on the EDT
    SwingUtilities.invokeLater(new Runnable()
    {
        @Override
        public void run()
        {
            progress.setString("Processing " + percent + "%");
            progress.setValue(percent);
        }
    });
}

// POSTPROCESSING 

// update progress bar (switch to indeterminate mode)
SwingUtilities.invokeLater(new Runnable()
{
    @Override
    public void run()
    {
        progress.setIndeterminate(true);
        progress.setString("Postprocessing...");
    }
});

// perform postprocessing (close input file, etc)

// DONE! 

SwingUtilities.invokeLater(new Runnable()
{
    @Override
    public void run()
    {
        progress.setIndeterminate(false);
        progress.setString("Done!");
        progress.setValue(100);
    }
});

اقتراحات

  • النظر في كتابة طريقة مريحة لتحديث شريط التقدم على إدت، وذلك للحد من فوضى في التعليمات البرمجية الخاصة بك ( SwingUtilities.invokeLater... public void run()... )




swing