عرض الانتاج CMD في بلدي واجهة المستخدم الرسومية (جافا)

StackOverflow https://stackoverflow.com/questions/667416

سؤال

وكيف يمكن أن أحصل على الإخراج من عملية CMD لعرض واجهة المستخدم الرسومية في بلدي؟ هذا هو رمز أنا باستخدام لتشغيل العملية:

try {
    String line;
    Process p = Runtime.getRuntime().exec("cmd /c \"e:\\folder\\someCommands.cmd\"");
    BufferedReader input =
            new BufferedReader(new InputStreamReader(p.getInputStream()));
    while ((line = input.readLine()) != null) {
        System.out.println(line);
    }
    input.close();
} catch (Exception err) {
    err.printStackTrace();
}

ولقد حاولت القيام بذلك:

jLabel1.setText(line);

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

هل كانت مفيدة؟

المحلول

هل إعادة رسم () بعد وضع نص التسمية؟

وعلى أي حال، يجب أن تكون عموما مترددة في تنفيذ عملية طويلة على موضوع الحدث واجهة المستخدم الرسومية. النظر في استخدام SwingWorker بدلا من ذلك.

نصائح أخرى

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

...
while ((line = input.readLine()) != null) {
    SwingUtilities.invokeLater(new SetTextRunnable(jLabel1, line));
}
...

class SetTextRunnable implements Runnable {
    private String line;
    private JLabel jLabel1
    public SetTextRunnable(JLabel jLabel1, String line) {
        this.jLabel1 = jLabel1;
        this.line = line;
    }
    public void run() {
        jLabel1.setText(line);
    }
}

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

تحرير لتحرير : حتى سخيفة لي، وأنا لم يلاحظوا SwingWorker وقد سبق ذكرها في جواب آخر

وبالإضافة إلى ما قاله الآخرون عن خاصية تعدد هذه - سترغب أيضا قراءة تيار الخطأ عملية طفل. وأعتقد أن (في بعض الحالات) إذا لم يكن لاستنزاف تيار خطأ في عملية يمكن أن يؤدي إلى تعليق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top