الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقة الربط في الجافا مع شاشة الدوس

بدأه *cpu* في 3 يونيو 2010 · 15 رد · 1,565 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته

صممت واجهة لبرنامج صغير يسوي compile , run

للمدخل من المستخدم

وفكرت لما يدخل المستخدم شي

مضغط على زر compile

فيتنفذ الأمر

نحفظ المدخل في ملف

و نعمل قراءة داخل ملف كود اللي يعمل الترجمه و يوضح الاخطاء

فيتنفذ هذا الأمر

javac filename

إذا فيه خطأ راح يعرض الخطأ على الانترفيس

و اذا مافيه خطأ راح نضغط زر run

فتطلع لي المخرجات على الانترفيس

فياليت احد يفيدني كيف اربط مع شاشة الدوس و ما ادري هل فكرتي صحيحه اول مره اتعامل مع انترفيس

ياليت عاجلا و شكرا لكم

#2
// Compile and Execute Other Java Codes

import java.io.* ;
import java.util.* ;
import javax.tools.* ;

public class Automated {

    public static void main (String[] args)  {
	String fileName = "Demo.java";
	String runCommand = "java Demo" ;

	try {
            // run java compiler javac
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
            if(compiler.run(null, bout, bout, fileName ) != 0) {
                // if Error message , print bout
                System.out.println( bout.toString() );
                return ;
            }

            // run java vm
            ArrayList<String> runResult =  readProgramOutputStream(runCommand) ;

            for ( String rr: runResult ) {
		System.out.println(rr);
            }
	}
	catch (Exception e) {
            System.out.println("error");
	}
    }

    // Execute program and read the output stream
    public static ArrayList<String> readProgramOutputStream (String path) throws IOException {
	Process process = Runtime.getRuntime().exec(path);
	BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()) );

	String line = null ;
	ArrayList<String> result = new ArrayList<String>();
	while ( (line = input.readLine() ) != null ) {
            result.add( line );
	}

	input.close();
	return ( result );
    }
}

تم تعديل هذه المشاركة بواسطة Wajdy Essam في 3 يونيو 2010 في 15:34

1

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#3
Wajdy Essam كتب:

// Compile and Execute Other Java Codes

import java.io.* ;
import java.util.* ;
import javax.tools.* ;

public class Automated {

    public static void main (String[] args)  {
	String fileName = "Demo.java";
	String runCommand = "java Demo" ;

	try {
            // run java compiler javac
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
            if(compiler.run(null, bout, bout, fileName) != 0) {
                // if Error message , print bout
                System.out.println( bout.toString() );
                return ;
            }

            // run java vm
            ArrayList<String> runResult =  readProgramOutputStream(runCommand) ;

            for ( String rr: runResult ) {
		System.out.println(rr);
            }
	}
	catch (Exception e) {
            System.out.println("error");
	}
    }

اتمنى توضيح هذه الجزئية قليلا

شكرا لك وفقك الله و بارك فيك

تم تعديل هذه المشاركة بواسطة *cpu* في 3 يونيو 2010 في 14:56

#4
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

ترجع لك نسخه من المترجم لكي تقوم باستدعائها ..

الدالة run تستقبل4 معاملات :

اقتباس
in - "standard" input; use System.in if null

out - "standard" output; use System.out if null

err - "standard" error; use System.err if null

arguments - arguments to pass to the tool

وقمنا بتغيير الكتابة من الكونسول الى ByteArrayStream حتى تستطيع كتابتها فيما بعد على أي Component ..

راجع التوثيق للمزيد:

http://java.sun.com/javase/6/docs/api/javax/tools/JavaCompiler.html

http://java.sun.com/javase/6/docs/api/javax/tools/ToolProvider.html

أرجوا أن تكون الصورة قد اتضحت،

بالتوفيق،

تم تعديل هذه المشاركة بواسطة Wajdy Essam في 3 يونيو 2010 في 15:36

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#5
 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

شكرا يا أخي على المعلومه

تم تعديل هذه المشاركة بواسطة {هويدي} في 4 يونيو 2010 في 04:14

#6

بارك الله فيك افدتني كثيرا و لكن حين التطبيق واجهت بعض المشاكل

منها

C:\Users\RAED\Desktop>javac co.java
co.java:163: cannot find symbol
symbol: method readProgramOutputStream(java.lang.String)
 ArrayList<String> runResult =  readProgramOutputStream(runCommand) ;

هل يوجد حل بديل؟

#7

أختي غريب الأمر

يفترض به أن يعمل بشكل جيد

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#8

هل تعريف الدالة readProgramOutputStream يوجد بداخل الملف أم في كلاس أخر؟؟

بالتوفيق،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#9

ماذا اكتب في داخلها ؟

readProgramOutputStream

كنت أظن انها معرفه داخل كلاس io

تم تعديل هذه المشاركة بواسطة *cpu* في 9 يونيو 2010 في 20:20

#10

لا هي ليست دالة معرفة في الجافا ، وانما هي دالة من صنع المبرمج :) ..لذلك عليك كتابة تعريفها..

// Execute program and read the output stream    public static ArrayList<String> readProgramOutputStream (String path) throws IOException {        Process process = Runtime.getRuntime().exec(path);        BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()) );        String line = null ;        ArrayList<String> result = new ArrayList<String>();        while ( (line = input.readLine() ) != null ) {            result.add( line );        }        input.close();        return ( result );    }

شاهد المثال كاملا في أول رد بالموضوع..

بالتوفيق،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#11

:) ههه لم أنتبه من كثرة الاستعجال هداني الله

شكرا لك وفقك ربي

#12

للأسف لا أدري لماذا لا تخرج النتيجة

يظل المؤشر يتحرك فقط

أعتقد يوجد مشكله هنا

for ( String rr: runResult )
          {      
		     outputarea.setText(rr);
            // System.out.println(rr);          
          }

أنا اريد النتيجة تعرض مباشره على الواجهة لذلك عدلت قليلا و لكن كلتا الحالتان لاتظهر نتائج

تم تعديل هذه المشاركة بواسطة *cpu* في 9 يونيو 2010 في 22:12

#13

الحمدلله تم حل المشكله

و لكن لا تظهر النتيجه على الواجهة سوى آخر سطر من المخرجات

ما السبب؟

#14

ولو أني لا أعرف ما هي واجهتك لكني أقترح أن تستخدمي append إن كانت موجودة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#15

للأسف غير موجوده و لم اجد لها بديل في هذا الكلاس ..

#16

الحمدلله تم الانتهاء من عمل واجهة لإحدى أدوات الترجمة بنجاح

أشكر كل من ساعدني

بارك الله فيكم و وفقكم لكل خير

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…