ورود

View Full Version : تولید دو فایل class.



farzad_paz
پنج شنبه 31 فروردین 1385, 15:34 عصر
دوستان سلام
من وقتی که مثالهای جاوا بخصوص swing رو با IDE بصورت پروژه کامپایل میکنم دو تا فایل کلاس تولید میکنه. که هیچکدوم به تنهایی کار نمیکنه و نمیتونم اون رو تبدیل به فایل اجرایی کنم.
مثلا پروزه با نام test.java دو تا فایل کلاس تولید میکنه به نامهای
test.class and test$1.class
ممنون از کمکتون

rezaTavak
پنج شنبه 31 فروردین 1385, 15:48 عصر
همون کلاسها فایل اجرایی هستند.

persianshadow
پنج شنبه 31 فروردین 1385, 17:14 عصر
میشه بگید منظورتون از فایل اجرایی چیه ؟

zehs_sha
جمعه 01 اردیبهشت 1385, 00:27 صبح
فایل هایی که نیاز به کامپایل و تبدیل به بایت کد نداشته باشد.بلکه خودشون به بایت کد تبدیل شده اند و فقط مفسر باید آنها را اجرا کند.

Argonod
جمعه 01 اردیبهشت 1385, 00:46 صبح
test.class کافیه برای run شدن و test$1.class به نظر من فقط یک فایل موقتی هست. بهتر بودی میگفتی که چه پیغام خطایی دریافت میکنی

persianshadow
جمعه 01 اردیبهشت 1385, 08:22 صبح
در مواردی که برنامه ها شامل swing هستند فایل دومی فذضا با نام test$1.class ایجاد می شود .

که به همراه فایل اصلی عمل می کند. پس این فایل به هیچ وجه موقتی نیست.

farzad_paz
جمعه 01 اردیبهشت 1385, 10:00 صبح
persianshadow دوست گرام منظورم از اجرایی فایل .exe است.
در رابطه با swing کاملا درست است. یعنی فقط با swing این مشکل است. من با سه IDE قوی تست کردم همین گونه عمل میکنند. اکثر سورسها هم مثالهای خود سان هست که بدون تغییر و هیچ خطایی نداره.

persianshadow
جمعه 01 اردیبهشت 1385, 12:07 عصر
ببین خود جاوا فایل .exe تولید نمی کنه . برای این کار اگر جی بیلدر داری . جی بیلدر این

امکان رو داره که فایل اجرایی .exe برای ویندوز تولید کنه ولی دیگه برنامه شما مستقل از پلتفرم

نیست.بهتره از برنامه خودت که شامل یک سری کلاس هست یک فایل .jar تولید کنی تا در اصل

همون فایل اجرایی که همه جا قابل اجرا هست و کاربر با یک کلیک بر روی اون می تونه برنامه

رو ببینه داشته باشی.

farzad_paz
شنبه 02 اردیبهشت 1385, 13:19 عصر
در متد main به جای استفاده از کد زیر برای شروع برنامه:
===============================

javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
===========================
از این کد :
-----------------------------------------------
مثلا برای کلاس Test میشه:

Test.createAndShowGUI();

-----------------------------------------------
اگه استفاده کنیم دیگه دو تا فایل کلاس تولید نمیشه.

فقط اگه یکی از اساتید لطف کنه و بگه چرا به جای استفاده از کد ساده دوم تمامی مثالهای swing که خود شرکت سان داده با کد بالا شروع میشه و فرق این دو تا چیه ممنون میشم.

wed_scorpion
شنبه 02 اردیبهشت 1385, 14:42 عصر
سلام
دلیل ایجاد چنین فایل هایی با پسوند 1$ و2$ و ... استفاده از زیرکلاس های داخلی است در واقع به ازای هر کلاس داخلی چنین فایلی افزوده می گردد. در مثال بالا نیز چون Runnable یک interfece است چنین اتفاقی می افتد البته این امر هیچ تاثیری در اجرای برنامه ندارد و تنها کافیست فایل اصلی را اجرا نمود.
دلیل استفاده شرکت سان از چنین روشی در فراخوانی متد Test.createAndShowGUI ایجاد یک thread جدید و اجرای سریع تر برنامه می باشد.
من نیز به شما پیشنهاد می کنم از چنین روشی استفاده کنید.