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

هل يوجد حل لهذه المشكلة في الكود ؟؟؟

مغلق
بدأه المستقيل في 3 يونيو 2007 · 23 رد · 1,310 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد طريقة لاستدعاء كلاس من فريم عند الدخول الى الفريم

للتوضيح:

عندي برنامج من عدة كلاسات معظم هذه الكلاسات عبارة عن شاشات والكلاسات الاخرى تحتوي على كودات تنفيذيه بدون شاشات

اريد ان اعرف اذا كان بامكاني استدعاء احدى هذه الكلاسات التنفيذية (التي لا تحتوي على شاشات) عند الدخول الى احد الشاشات مباشرة

ارجو ان يكون السؤال واضح

هذا هو جزء من الكود ويتم تنفيذه عند الضغط على الـ Button المسماة B1

حيث ان الكلاس Main هو عبارة عن الشاشة الرئيسية والكلاس SerialToGsm هو عيارة عن كلاس يحتوي على كود تنفيذي فقط ولا يحتوي على شاشات

B1.setText("Login");
		 B1.addActionListener(new ActionListener() {
			 public void actionPerformed(ActionEvent e)
			 {
				 B1_actionPerformed(e);
 if (T1.getText().equals("admin") && T2.getText().equals("mob"))
	 {setVisible(false);
		 Main main = new Main();
		 main.show();
		 SerialToGsm GSM = new SerialToGsm();
		 GSM.show();
					 }

		 else
					 {jLabel5.setText("Wrong User Name or Passowrd");}
			 }

		 });

وهذا هو الـ error

SerialToGsm(java.lang.String) in SerialToGsm cannot be applied to ()
 	SerialToGsm gsm = new SerialToGsm();
						   ^
  cannot resolve symbol
 symbol  : method show ()
 location: class SerialToGsm
 		gsm.show();}
					^
 2 errors

 Tool completed with exit code 1
#2

مرحبا اخي المستقيل

انت تقول ان الكلاس SerialToGsm لا يحتوي على شاشات - اي انه ليس jFrame - يعني لا يحتوي على method اسمها show()

كما هو واضح في الخطأ

cannot resolve symbol
symbol  : method show ()
location: class SerialToGsm
		gsm.show();}
					^

يعني ال compiler لم يعثر على هذه الميثود

.show()

ان شاء الله وضحت

#3

الكود تبعك يا اخي يعمل ولكن لم أفهم لماذا تنادي دالة

main.show();

والـ main أنت لم تصنع فيها دالة show

فقط ألغي هذا السطر

و نفس الشي بالنسبة للـ

GSM.show();

--------------------------------

show()

دالة موجودة في الـ Jframe

بالتالي لا يمكن مناداتها إلا بالكلاسات التي تعمل extend لل JFrame

وفي حالتك لا اظن ان الـ main ولا الـ gsm يعملان extend لل JFrame

#4

هذا الكود بعد التغيير

B1.setText("Login");
		B1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				B1_actionPerformed(e);
if (T1.getText().equals("admin") && T2.getText().equals("mob"))
	{setVisible(false);
		Main main = new Main();
		SerialToGsm GSM =new SerialToGsm();
}
		else
					{jLabel5.setText("Wrong User Name or Passowrd");}
			}

وهذا هو الخطا الذي يظهر عند عمل كمبايل

C:\Documents and Settings\XPPRESP3\Desktop\code test\Login.java:111: SerialToGsm(java.lang.String) in SerialToGsm cannot be applied to ()
		SerialToGsm GSM =new SerialToGsm();
								 ^
1 error

Tool completed with exit code 1
#5

لديك مشكلة في SerialToGsm

هل هي class

هل لها constractor

هل قمت بالخطأ بصنع متغير String بنفس الإسم SerialToGsm

#6

شكرا على اهتمامك بهذا الموضوع

ان الكلاس SerialToGsm ليس فيه اي مشاكل وعند عمل كمبايل و رن له يعمل بدون اي مشاكل

ولم اقم بتعريف متغير بنفس اسم الكلاس SerialToGsm

#7

عرف كونستركتر فاضي في الكلاس Serial ويشتغل معك الكود أوكي ،

اذا كنت تريد إنشاء اوبجكت وقت التنفيذ ، بمعنى وقت اظهار الفريم ، استعمل static initialization block

هذا مثال بسيط :

import java.awt.FlowLayout;
import javax.swing.*;
class GUI extends JFrame{
static JTextField text;
 GUI(String borderName){
   super(borderName);
  add(text);
  setVisible(true);
  setSize(200,200);
  setLayout(new FlowLayout());
 }
 static {
	 text=new JTextField();
	 text.setText(new Business().getOut());
 }
public static void main(String[] args){
	new GUI("Test");
}

}

class Business{
	String out;
	Business(){
		out="eek";
	}

	public String getOut() {
		return out;
	}
}
#8

شكرا اخي عيسى

ولكن الطريقة غير واضحة

هل بامكاني ان ابعث الكود الكامل لل SerialToGSM حتى تريني اين انشئ الوبجيكت ؟؟

ولك جزيل الشكر

#9

وضح أكثر ، وهل انتهت مشكلة الكود السابق ؟

واتمنى ان تضع الكود كاملاً حتى نحكم ،

#10

هذا هو الكود لكلاس ال SerialToGSM

import javax.swing.*;
import parport.ParallelPort;
import java.io.*;
import java.util.BitSet;
import javax.comm.*;
import java.lang.*;
public class SerialToGsm {
static int check=0,connect=0;
static int number=0;
int aByte=0;
static int voicen=0;
static String text="";
 ParallelPort lpt1 = new ParallelPort(0x378); // 0x378 is normally the base address for the LPT1 port
static CReceiveThread receiveThread;
 SerialPort sp;
static int c=0;
   InputStream in;
	OutputStream out;
	String lastIndexRead;
	String senderNum;
	String smsMsg;
	String ON;
	SerialToGsm(String porta) {}
	   public void connect(String porta)
	   {
		try {

		  CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(porta);
			 sp = (SerialPort)portId.open("Sms_GSM", 0);
			sp.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
			sp.setFlowControlMode(sp.FLOWCONTROL_NONE);

			in = sp.getInputStream();
			out = sp.getOutputStream();

receiveThread = new CReceiveThread();
		receiveThread.start();
		//receiveThread.stop();




		}
		catch (Exception e) {
			System.out.println("Exception " + e);

		}
	}

	private String sendAndRecv(String s, int timeout) {
		try {
			// clean serial port input buffer
			in.skip(in.available());
			System.out.println("=> " + s);
			s = s + "\r";		 // add CR
			out.write(s.getBytes());
			out.flush();

			String strIn = new String();
			for (int i = 0; i < timeout; i++){
				int numChars = in.available();
				if (numChars > 0) {
					byte[] bb = new byte[numChars];
					in.read(bb,0,numChars);
					strIn += new String(bb);
				}
				// start exit conditions
				// ---------------------
				if (strIn.indexOf(">\r\n") != -1) {
					break;
				}

				if (strIn.indexOf("OK\r\n") != -1){
					break;
				}

				if (strIn.indexOf("ERROR") != -1) { // if find 'error' wait for CR+LF
					if (strIn.indexOf("\r\n",strIn.indexOf("ERROR") + 1) != -1) {
						break;
					}
				}

		Thread.sleep(100); // delay 1/10 sec
			}

			System.out.println("<= " + strIn);

			if (strIn.length() == 0) {
				return "ERROR: len 0";
			}

		  //  JOptionPane.showMessageDialog(null,""+strIn);
			return strIn;
		}
		catch (Exception e) {
			System.out.println("send e recv Exception " + e);
			return "ERROR: send e recv Exception";
		}
	}


public void close()
		{
			try { sp.close(); } catch (Exception e) {}
		}
public void discont(int con)
{

connect=con;
if(con==0)
{
	//receiveThread = new CReceiveThread();
//receiveThread.start()
}
else
{//receiveThread.stop();
//receiveThread.stop();
}
}
public void call(int num1,String text1,int voice)
{check=1;
number=num1;
text=text1;
voicen=voice;

	}

	private class CReceiveThread extends Thread
	{
		public void run()
		{ Object SYNC=new Object();

String sms=" ",num="",subsms="";
int i=1;
sendAndRecv("AT+csmp=17,168,0,0",2);
sendAndRecv("AT+cmgf=1",2);



while(true)
{													//START WHILE LOOP
	  synchronized (SYNC)
					  {


	  try { sleep(500); } catch (Exception e) {}



	//SET THE MOBILE LANGUAGE TYPE (ENGLISH)

 boolean UNRE;
UNRE = sms.indexOf("REC READ") > 0;		//CHEK FOR THE MESSAGE READ OR NO
if (UNRE==true)
	{
	  sendAndRecv("AT+CMGD=1",1);		//IF READ DELET IT
	  sms=""+sendAndRecv("AT+cmgr=1", 1);}




sms=""+sendAndRecv("AT+cmgr=1", 10);	//READ THE MESSAGE NUMBER 1 FROM MOBILE


if(!sms.equals(" "))
{
	if(sms.length()>=90)
	{



		//num=sms.substring(33,45);
		//System.out.println(""+num);



			boolean NUM;
			NUM = sms.indexOf("962777963453") > 0;			//CHEK THE THE MESSAGE SENDER NUMBER
			 if (NUM==true)



		//if(num.equals("962777915979"))
		{



		//subsms=sms.substring(112,114);					//CHEK THE DATA TO BE CONTROLLING
		//System.out.println(""+subsms);


/***************************CHEK FOR THE MESSAGE CONTENT****************************************/

					  boolean A;
					A = sms.indexOf("#11*") > 0;			//CHEK THE DATA TO BE CONTROLLING
					if (A==true)
					{
					   	c= c | 1;							//LOGICAL OR GATE
						  lpt1.write(c);					  // write a byte to the port's DATA pins

		 				 sendAndRecv("AT+CMGS=\"0795998684\",129\r	 A IS ON 32", 30);

		 			   }


		 			 boolean B;
					B = sms.indexOf("#10*") > 0;
					if (B==true)
					  {
					  c= c & 254;							//LOGICAL AND GATE
					  lpt1.write(c);

		 				 sendAndRecv("AT+CMGS=\"0795998684\",129\r	  A IS OFF 32", 30);
		 			 }
					 boolean C;
					C = sms.indexOf("#21*") > 0;
					if (C==true)
		 			 {

					   	c= c | 2;
					   lpt1.write(c);

		 				sendAndRecv("AT+CMGS=\"0795998684\",129\r	 B IS ON 32", 30);
		 			 }
					 boolean D;
					D = sms.indexOf("#20*") > 0;
					if (D==true)
		 			 {
						c= c & 253;
					  lpt1.write(c);
					  lpt1.write(c);

		 				 sendAndRecv("AT+CMGS=\"0795998684\",129\r	 B IS OFF 32", 30);
		 			 }

					 boolean E;
					E = sms.indexOf("#31*") > 0;
					if (E==true)

		 			 {

					  c= c | 4;
					  lpt1.write(c);
		 		   sendAndRecv("AT+CMGS=\"0795998684\",129\r	 C IS ON  32", 30);
		 			 }
					 boolean F;
					F = sms.indexOf("#30*") > 0;
					if (F==true)
		 			 {
					  c= c | 251;
					  lpt1.write(c);
		 				sendAndRecv("AT+CMGS=\"0795998684\",129\r	 C IS OFF 32", 30);
		 			 }
					 boolean G;
					G = sms.indexOf("#41*") > 0;
					if (G==true)
		 			 {
					  c= c | 8;
					  lpt1.write(c);

		 				 sendAndRecv("AT+CMGS=\"0795998684\",129\r	 D IS ON  32", 30);
		 			 }
					 boolean H;
					H = sms.indexOf("#40*") > 0;
					if (H==true)
		 			 {
						c= c & 247;
					  lpt1.write(c);

		 				 sendAndRecv("AT+CMGS=\"0795998684\",129\r	 D IS OFF 32", 30);
		 			 }

		 			 boolean I;
			   		I = sms.indexOf("#51*") > 0;
					if (I==true)
							 		  {
						c= c | 16;
 			   		  lpt1.write(c);

 			   			 sendAndRecv("AT+CMGS=\"0795998684\",129\r	  E IS OFF 32", 30);
			   		 }

		 			 boolean J;
					  J = sms.indexOf("#50*") > 0;
					if (J==true)
			   		  {
						c= c & 239;
			   		  lpt1.write(c);

			   			 sendAndRecv("AT+CMGS=\"0795998684\",129\r	  E IS OFF 32", 30);
			   		 }
					 boolean K;
			 		K = sms.indexOf("#61*") > 0;
					if (K==true)
			 			 {
					  c= c | 32;
			   		lpt1.write(c);

			 			 sendAndRecv("AT+CMGS=\"0795998684\",129\r	 F IS ON 32", 30);
			   			  }
					 boolean L;
					  L = sms.indexOf("#60*") > 0;
					if (L==true)
			   			 {

			   			c= c & 223;
			   		 lpt1.write(c);

			   		 	 sendAndRecv("AT+CMGS=\"0795998684\",129\r	 F IS OFF 32", 30);
			   			  }

					 boolean M;
			 		M = sms.indexOf("#71*") > 0;
					if (M==true)

			   			  {

						c= c | 64;
			   		 lpt1.write(c);

				   		sendAndRecv("AT+CMGS=\"0795998684\",129\r	 G IS ON  32", 30);
			   		 		}
					 boolean N;
					  N = sms.indexOf("#70*") > 0;
					if (N==true)
			   		 		{

						c= c & 191;
			   		lpt1.write(c);
			   		 	sendAndRecv("AT+CMGS=\"0795998684\",129\r	 G IS OFF 32", 30);
			   	 			 }
					 boolean O;
					  O = sms.indexOf("#81*") > 0;
					if (O==true)
			   		 		 {

					  c= c | 128;
			   	   lpt1.write(c);

			   		 	sendAndRecv("AT+CMGS=\"0795998684\",129\r	 H IS ON  32", 30);
			   		 		 }
					 boolean P;
					  P = sms.indexOf("#80*") > 0;
					if (P==true)
				 			 {

						c= c & 127;
					  lpt1.write(aByte);

			   			 sendAndRecv("AT+CMGS=\"0795998684\",129\r	 H IS OFF 32", 30);
		 			 		}
					 boolean Q;
			 		Q = sms.indexOf("#ALL0*") > 0;
					if (Q==true)
				 			 {
						  aByte=0;
					  lpt1.write(aByte);

			   			 sendAndRecv("AT+CMGS=\"0795998684\",129\r	 ALL DEVICES ARE OFF 32", 30);
		 			 		}

					 boolean R;
					R = sms.indexOf("#ALL1*") > 0;
					if (R==true)
				 			 {
						  aByte=255;
					  lpt1.write(aByte);

			   			 sendAndRecv("AT+CMGS=\"0795998684\",129\r	 ALL DEVICES ARE ON 32", 30);
		 			 		}

					 boolean S;
		   			S = sms.indexOf("#??*") > 0;
					if (S==true)
		   				   {
						aByte = lpt1.read(); // read a byte from the port's STATUS pins
	 					System.out.println("Input from parallel port: " +ON);

		   			   	 sendAndRecv("AT+CMGS=\"0795998684\",129\r	 ON +DEVICES ARE ON 32", 30);
		 			 		}


			   else
		 		{
		 			sendAndRecv("AT+CMGS=\"0776708407\",129\r	 WRONG DATA 32", 30);

		 			System.out.println("WRONG DATA");

		 			}
/***************************END OF CHEK FOR HTE MESSAGE CONTENT************************************/

		}


  // else
  //  {
	// sendAndRecv("AT+CMGS=\"\"+num\"\r  YOU ARE UNAUTHORIZED PERSON 32", 30);
//
  //	   }

}

}


}						//SYN END


}						//WHILE END

}



}

  public static void main(String a[])
{
SerialToGsm	port=new SerialToGsm("COM1");

port.connect("COM1");


	}



}
#11

طيب وأين المشكله ؟؟؟؟؟؟

ياأخي اكتب مشكلتك ماهي بالتفصيل ،

#12

المشكلة ذكرتها في بداية الموضوع

وهي ان لدي كلاس اسمه SerialToGsm وكلاس اخر باسم Main وكلاس باسم Login

اريد استدعاء الكلاس SerialToGsm وكلاس Main عند الضغط على بوتن في ال كلاس Login

علما ان الكلاس SerialToGsm هو عبارة عن كلاس تنفيذي وليس فيه اي شاشات كما رايت

اما الكلاس Main فهو عبارة عن فريم وليس لدي اي مشكلة في استدعائة ولكن المشكلة في استدعاء كلاس SerialToGsm

اي اريد ان يكون كلاس SerialToGsm في حالة Run عند الضغط على البوتن

#13

ٍعند الضغط على الزر ،

SerialToGsm stg=new SerialToGsm()
#14

اخي المستقيل انت عامل constructor في الكلاس SerialToGsm وهذا كما هو واضح في السطر 23 في الكود

 SerialToGsm(String porta) {}

يعني لازم لما عمل اوبجكت جديد تدخل قيمة المتغير الي هو ال porta - رقم البورت-

جرب مثلا تغير الكود الخاص بال Button

SerialToGsm GSM =new SerialToGsm();

الى

SerialToGsm GSM =new SerialToGsm("378");
#15

عند كتابة الكود

SerialToGsm stg=new SerialToGsm()

اعطى نفس الايرور

C:\Documents and Settings\XPPRESP3\Desktop\code test\Login.java:112: SerialToGsm(java.lang.String) in SerialToGsm cannot be applied to ()
		SerialToGsm stg=new SerialToGsm();
								^
1 error

Tool completed with exit code 1
#16

وعند كتابة الكود

SerialToGsm GSM =new SerialToGsm("378");

لم يعطي اي ايرور ولكن الـ SerialToGsm لم يكن في حالة الـ Run عند الضغط على البوتن

#17

ماذا تقصد "بحالة الـ Run"

عند تنفيذك للكود :

SerialToGsm GSM =new SerialToGsm("378");

قمت بصنع كائن يسمى GSM

و هو موجود بالذاكرة

و لكي تجعل اي دالة فيه تعمل عليك استدعاءها

مثلا

GSM.dosomething()

طبعا هذا المثال إذا كانت لديك دالة باسم dosomething

#18

مثل ما قال الاخ علي

هنا قمنا بعمل object

SerialToGsm GSM =new SerialToGsm("378");

بعد ذلك نقدر ندخل على الميثودز الموجودة داخل هذا الاوبجكت، انا شايف انه في ميثود موجودة في السطر 24

هل هي الخاصة بعمل Run

public void connect(String porta)

فتقدر تطبق هذا في الكود الخاص بال button هكذا

SerialToGsm GSM =new SerialToGsm("378");
GSM.connect("هنا تضع رقم البورت")
#19

شكرا لتعاونكم

ولكن انا اريد استدعاء الكلاس كاملا

اي عند الضغط على البوتن اريد ان يعمل الكلاس وكانه في حالة ال Run

لان وظيفة هذا الكلاس هو استقبال رسائل من الهاتف المرتبط بالسيريال بورت Com1

#20

اخي المستقيل

الان انت عندك في الكلاس SerialToGsm مجموعة methods اي واحد منهم هي الي راح تخلي الكلاس في حالة Run ؟ يعني مثل ماقلت (استقبال رسائل من الهاتف المرتبط بالسيريال بورت Com1)

ال methods الموجودة

public void call(int num1,String text1,int voice)

public void connect(String porta)

	private String sendAndRecv(String s, int timeout) {

انت ما عليك الا ان تستدعي الميثود المناسبة

#21

الجزء الذي اريد استدعائه هو

private class CReceiveThread extends Thread
	{
		public void run()
		{ Object SYNC=new Object();
#22

جيد

في الكود انت فعلا تستدعي الكلاس CReceiveThread من خلال الميثود

connect(String porta)

راجع الكود :

	   public void connect(String porta)
	   {
		try {

		  CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(porta);
			 sp = (SerialPort)portId.open("Sms_GSM", 0);
			sp.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
			sp.setFlowControlMode(sp.FLOWCONTROL_NONE);

			in = sp.getInputStream();
			out = sp.getOutputStream();

	receiveThread = new CReceiveThread();
	 receiveThread.start();


		}
		catch (Exception e) {
			System.out.println("Exception " + e);

		}
	}

هنا عملنا اوبجكت من الكلاس واستخدمناه

	receiveThread = new CReceiveThread();
	 receiveThread.start();

تم تعديل هذه المشاركة بواسطة الحرازي في 3 يونيو 2007 في 14:47

#23

شكرا اخي الحرازي

لقد نجحت هذه الطريقة

GSM.connect("COM1");

اشكرك كثيرا

#24

ارجو ذلك اخي المستقيل :)

هذا الموضوع مغلق.

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