سؤال

أنا أستخدم هذا الرمز لجعل برنامج Java الخاص بي يفتح نافذة CMD (مرئية):

try {
            String line;
            Process p = Runtime.getRuntime().exec("cmd /C start \"Render\" \"" + myPath + "\\punchRender.cmd\"");
             BufferedReader input =
                    new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((line = input.readLine()) != null) {
            System.out.println(line);
            jLabel7.setText(line);

            }
            input.close();
        } catch (Exception err) {
            err.printStackTrace();
        }

ولقد كنت أحاول أن أفعل نفس الشيء مع محطة OSX، وهذا هو المكان الذي أنا فيه الآن:

  try {
            String line;
            Process p = Runtime.getRuntime().exec("sh " + myPath + "/punchRender.sh");
             BufferedReader input =
                    new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((line = input.readLine()) != null) {
            System.out.println(line);
            jLabel7.setText(line);

            }
            input.close();
        } catch (Exception err) {
            err.printStackTrace();
        }

حتى الآن، لم يحالفك الحظ :( أي اقتراحات؟الملف .sh لا يعمل حتى...

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

المحلول

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

Process p = Runtime.getRuntime().exec(myPath + "/punchRender.sh")

يحرر:

لا أعرف Java على وجه التحديد إذا كان هناك أي طريقة لتعيين أذونات الملفات لنظام Unix/Linux لتعيين بت التنفيذ أو كيفية الهروب من علامات الاقتباس.ولكن سيكون شيء من هذا القبيل:

Process chmod = Runtime.getRuntime().exec("chmod u+x \"" + myPath + "/punchRenderer.sh\"")

نصائح أخرى

وهذا يجب أن تعمل. ليس فقط تشغيل البرنامج النصي، ولكن فتح المعبر أيضا:

وProcess p = Runtime.getRuntime().exec("open -a /Applications/Utilities/Terminal.app \"" + myPath + " /punchRender.sh\"");

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

وبالمناسبة، حاولت التعليمات البرمجية في فئة على بلدي ماك في المنزل، وأنه يتعارض مع ملف .sh على ما يرام. لقد تم تشغيل الطبقة جافا من سطر الأوامر. ربما ش ليس فقط في PATH الخاص بك.

وأفترض أن جربت أن الملف .sh غير قابل للتنفيذ، وليس لك؟

ويمكن أقترح عليك التقاط الخطأ المعياري <م> وكذلك والإخراج القياسية، وتفريغ ذلك. وينبغي أن تعطيك فكرة عن ما يحدث (انها ممارسة جيدة عموما).

وقد تحتاج إلى جمع الإخراج القياسي والخطأ المعياري في المواضيع المختلفة لتجنب عرقلة القضايا. انظر هنا لStreamGobbler

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