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

كيف تتحكم في عمل الدالة Main من كلاس اخر

بدأه edany911 في 17 ديسمبر 2008 · 7 رد · 851 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اخواني الأعزاء لدي برنامج simulation واريد ان اضيف له واجهة رسومية باستخدام swing

لدي عدة كلاسات لكن المهم في الكلاسين التاليين

1- كلاس يحتوي على العمليات اللازمة لعمل البرنامج ويحتوي على الدالة main التي يبدا تشغيل البرنامج منها

2- كلاس يحتويى على الواجهة الرسومية للـ simulation وتحتوي على ثلاثة ازارر ( توقف ، تشغيل بعد التوقف ، اعادة التشغيل )

المطلوب : كيف استطيع الوصول للـدالة main من خلال الكلاس الثاني لكي تعمل الازرار

واذا كانت هناك فكرة اخرى لجعلها تعمل اكون من الشاكرين

مع الشكر الجزيل

#2

قم بنقل الـ main إلى الـ class الثاني

و في الـ main الجديد قم بإنشاء instance من الـ class الأول لتقوم بالعمليات عليه

#3

مشكور اخي ...

لكن كيف يمكنني ان اوقف عمل main او اعيد تشغيلها

بمعنى ما هو الاوامر التي تنفذ ذلك

مع خالص شكري وتقديري لك

#4

ما قصدته أنا في مشاركتي السابقة هو نقل كود الـ Main من class إلى أخرى

لم أفهم ما قصدته في المشاركة رقم3

#5

شكرا لك اخي ...

اللي اقصده بعد نقل الدالة main الى نفس الكلاس ... كيف استطيع ايقافها او اعيد تشغيلها من خلال الازرار

للتوضيح اكثر سارفق لك الكلاس الاول وجزء من الكلاس الثاني الذي يحتوي على الازرار قبل نقل الدالة main ( اي قبل اقتراحك )

الكلاس ا

 public class Simulator
{
	private Ocean ocean;
	private SimulatorView simView;

/*	
	public static void main(String[] args) 
	{
		Simulator sim = new Simulator(50, 60);
		sim.run(1000);
	}
 */   
	/**
	 * Set up the simulation
	 * @param height ocean dimension
	 * @param width ocean dimension
	 */
	public Simulator(int height, int width)
	{
		// Create simple fish parameter objects for the three
		// kinds of fish. These could be replaced by control panels
		SFPs herringParams = new SFPs();
		herringParams.initParams(4.0, 1.0, 0.8, 2.0, 6.0, 3, 30, 0, 0.0);
		SFPs groperParams = new SFPs();
		groperParams.initParams(8.0, 1.0, 0.8, 0.0, 16.0, 3, 30, 1, 8.0);
		SFPs sharkParams = new SFPs();
		sharkParams.initParams(16.0, 1.0, 0.8, 0.0, 32.0, 3, 30, 4, 12.0);
		ocean = new Ocean(height, width, herringParams, groperParams, sharkParams);
		simView = new SimulatorView(height, width);

		// define in which color fish should be shown
		simView.setColor(Herring.class, Color.red);
		simView.setColor(Groper.class, Color.blue);
		simView.setColor(Shark.class, Color.black);
	}

	/**
	 * Run the simulation propper
	 * @param steps number of iterations
	 */
	public void run(int steps)
	{
		// put the simulation main loop here
		for (int i = 0; i < steps; i++)
		{
			ocean.act(i);
			simView.showStatus(i, ocean);
		}
	}
}

جزء من الكلاس الثاني

public class SimulatorView extends JFrame
{
...
		//Create stop button and attach action to it 
		JButton stopButton = new JButton("Stop");
		stopButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				.....

			}
		});
}

شاكراً لك ومقدراً صرف وقتك الثمين

تم تعديل هذه المشاركة بواسطة edany911 في 18 ديسمبر 2008 في 09:35

#6

فكر أكثر

المحاكاة عندك تكمن في الدالة run لو استطعت أن تتحكم فيها فأنت تستطيع إيقاف وتشغيل المحاكي

باستخدام متغيرين boolean

تحياتي

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

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

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

728x90.png

#7

شكراً لك اخي الكريم

#8

بمجرد عمل الكلاس Simulator لن تستطيع الضغط على أي زر في الواجهه حتى ينتهي عمل الكائن Simulator ، والسبب أنه يعمل في نفس الThread ، وهكذا ستتوقف الواجهه Block الى أن تنتهي الداله run وتنتهي الحلقه ..

الحل هنا بجعل الكلاس Simulator يعمل في Thread منفصل .. وبالتالي في الواجهه تستطيع أن تتعامل مع أي زر وقت عمل الكلاس Simulator .

بعد عمل ذلك ، تستطيع التحكم في تشغيل الSimulator باستخدام المتغيرات boolean ، مثلا أجعل في الكلاس Simulator متغير منطقي state قيمته true .. الأن داخل الداله run اجعل الحلقه تستمر ما دامت قيمه المتغير هي true ،، وقم بعمل أيضا داله أخرى لتغيير قيمه state وجعلها false .

في الواجهه عندما تريد أن توقف الSimulator كل ما عليك حينها هو أن تستدعي الداله التي تقوم بتغيير قيمه الstate وبالتالي لن تتحق الداله run ولن تعمل .. وعند ارجاع state مره أخرى سوف يستمر بالعمل ..

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

بالتوفيق .

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

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

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

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