PDA

View Full Version : تفاوت کامپایل و اجرای برنامه ها در Net Beans و به صورت دستی(cmd)



dele514
شنبه 18 مرداد 1393, 08:43 صبح
سلام به همه.
من یه برنامه ساده رو به طور آزمایشی در نت بینز ایجاد کردم که اول پکیج رو ایجاد کرده بعد کلاس main و....
وقتی برنامه رو اجرا می کنم مشکلی نداره.اما همین برنامه رو از طریق cmd کامپایل می کنم و می خوام اجراش کنم ارور میده.
جالب این جاست که وقتی کد package name; رو پاک میکنم،برنامه کامپایل میشه و اجرا.
ارور به این صورت هست:
rc\consooli>java Nb
Exception in thread "main" java.lang.NoClassDefFoundError: Nb (wrong name: nb/Nb
)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java :800)
at java.security.SecureClassLoader.defineClass(Secure ClassLoader.java:14
2)
at java.net.URLClassLoader.defineClass(URLClassLoader .java:449)
at java.net.URLClassLoader.access$100(URLClassLoader. java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java: 361)
at java.net.URLClassLoader$1.run(URLClassLoader.java: 355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:4 25)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 58)
at sun.launcher.LauncherHelper.checkAndLoadMain(Launc herHelper.java:482)

یه سوال دیگه اینکه چرا وقتی برنامه ای رو از طریق cmd کامپایل میکنم اگه کلاس ها رو به صورت public تعریف کنم،ارور میده؟
اما در نت بینز برنامه اجرا میشه.:گیج:

mr.dp+
شنبه 18 مرداد 1393, 10:04 صبح
الان که این خطا رو بهتون داده (java.lang.NoClassDefFoundError) در خط دوم ، یعنی این CLASSPATH شما مشکل داره و باید تنظیم بشه !
برای کامپایل یه کلاس جاوا بید اینکارو انجام بدی : javac ClassName.java
برای چند تا کلاس باس اینکارو انجام بدی : *javac ClassName.java
و بعدش برای اجرای برنامه ات : java ClassName استفاده کنید و اینو بدون که فرمان های جاوا حساس به حروف هستن. یعنی اسم کلاس چطوری هستش باس اینطوری نوشته بشه (ClassName.java)

اگه بعد رفع مشکل CLASSPATH بازم مشکلی یا خطایی مونده بود ، شما اون برنامه ساده رو همراه با پکیج و ریشه و ... بزار اینجا که یه نگاهی بندازیم ببینیم چیکار کردی.

dele514
شنبه 18 مرداد 1393, 17:27 عصر
داداش دیگه دستت درد نکنه.روش کامپایل رو که خودم می دونم.مشکل من اینه که چرا یه برنامه تو نت بینز اجرا می شه اما تو خط فرمان نه.این دستورات خط فرمان رو هم مطمئنم درست نوشتم.
بالا توضیح دادم،اگه همون برنامه رو پکیجشو(package name_of_package;)رو از برنامه پاک میکنم توی خط فرمان اجرا میشه.برنامم یه برنامه آزمایشی و ساده.مشکلی از بابت برنامه ندارم.
راستی این قضیه public تعریف کردن کلاس چیه؟چرا به اون گیر میده؟
و بعد classpath چیه و چه طوری باید تنظیم کنم؟

mr.dp+
شنبه 18 مرداد 1393, 18:26 عصر
ای ول ای ول که بلدی.
این برا تنظیم CLASSPATH : کلیک (http://docs.oracle.com/javase/tutorial/essential/environment/paths.html)
برای package هم که شما باید از فرمان -cp استفاده کنید که این آموزش میتونه کمکت کنه > کلیک (http://www.shivasoft.in/blog/java/compile-and-run-java-program-in-package-from-command-line/)
و اینکه نمیدونم منظورت از اینکه کلاسها رو بصورت public تعریف کنی چیه . شما کلاس اصلی رو باید بصورت public تعریف کنی. کدت روو با اون حالت که خطا میده بزار ببینم.

dele514
شنبه 18 مرداد 1393, 20:45 عصر
ای ول ای ول که بلدی
به قول یکی از دوستان حیف که اینجا جاش نیست:عصبانی:
در ضمن دوست عزیز من نمیدونم شما چه طوری سوال منو خوندی؟اگه من path نکرده بودم که قضیه جدا بود.(اصلا javac کار نمیکرد و کامپایل نمیشد که بخواد خطایابی کنه.):تشویق:ای ول به شما!
اون مشکل public هم حل شد.باید اسم کلاس اصلی رو با اسم فایل یکی می کردم.

شما کلاس اصلی رو باید بصورت public تعریف کنی
بابت این نکته ممنون.ولی من تو یه کتاب دیدم که کلاس های فرعی رو به صورت public تعریف کرده بود!
در ضمن اگه میتونید یه منبع فارسی خوب که پر از نکته باشه رو معرفی کنید.

mr.dp+
شنبه 18 مرداد 1393, 21:22 عصر
ببین دوست عزیز من از کل کل خوشم نمیاد و بخاطر این اینجا هستم که هم سطح دانشمو بالا ببرم با تشخیص خطاها و حلشون و هم اینکه کمکی کرده باشم !
این استثناء هم (java.lang.NoClassDefFoundError) وقتی رخ میده که اسم کلاس با اسم فایل یکی نباشه و کامپایلر نتونه مشخص کنه و به همین خاطر این استثنا رخ میده [منبع (http://docs.oracle.com/javase/7/docs/api/java/lang/NoClassDefFoundError.html)]
از شما هم به خاطر جواب اشتباهم معذرت میخوام چون من قبلا تو یه کتاب (که به اشتباه اینو نوشته بود) خوندم که این خطا بخاطر CLASSPATH هستش !

لطفا مطالب فارسی به ظریفی این مطالب انگلیسی هم هرجا پیدا کردی بزار تو تاپیک بقیه هم ببین

dele514
یک شنبه 19 مرداد 1393, 18:34 عصر
ببین دوست عزیز من از کل کل خوشم نمیاد و بخاطر این اینجا هستم که هم سطح دانشمو بالا ببرم
منم دقیقا مثل شما و جسارتا قصد کل کل با شما رو ندارم و خودمو در اندازه ای نمی بینم که بخام با شما کل کل یا سطح دانش نداشتمو به رخ بکشم.
اما از اون جمله ای که نوشته بودید ای ول..... بهم برخورد.
به هر حال از شما معذرت میخوام اگه ناراحت شدین.