שאלה בjava

mayav

New member
שאלה בjava

איך עושים בjava Sleep? האם צריך לציין איזה אובייקט או אפשר להשהות את כל התוכנית ל חצי דקה?
 

אלדד28

New member
את צריכה להשתמש בפונקציה

sleep שקיימת באובייקט java.lang.Thread. בעיקרון תוכנית פשוטה רצה על Thread אחד בלבד, ולכן את פשוט קוראת שם ל-sleep. אם התוכנית יותר מורכבת ויש בה מספר thread-ים, צריך לעצור כל אחד מהם בנפרד.
 

mayav

New member
אז אם עשיתי

בתחילת התוכנית import java.wat.* אז מספיק לי לרשום slepp(100)
 

mayav

New member
אם אני רושמת Thread.sleep(100);

אז אני מקבלת שגיעה: unreported exception java.lang.InterruptedException; must be caught or declared to be thrown Thread.sleep(100); ^
 

neko

New member
את צריכה להקיף את הSLEEP

בתפיסת שגיאה כך:
try { Thread.sleep(100) catch (Exception e) {}​
ואם אני זוכר נכון, זה יספיק...
 

neko

New member
../images/Emo9.gif תיקון...

try { Thread.sleep(100) } catch (Exception e) {}​
 

gmorphus

New member
למה exception?

אני לא יודע JAVA, אבל אני לא רואה שום סיבה שתהיה exception וגם אם כן מה פתאום להתעלם ממנה? איזה צורה יש לזה?
 

neko

New member
SLEEP לא נועדה לביצוע "עצירה

זמנית" לתוכנית (אני חושב שבשביל זה יש את DELAY)(). הרעיון של SLEEP הוא לעצור את הTHREAD הנוכחי עד שמישהו מבחוץ יקרא לו. כשאותו "מישהו" יקרא לTHREAD, יזרק בו EXCEPTION, והTHREAD ימשיך בפעולתו. אבל ניתן להשתמש בSLEEP בשביל השהיה, ואז עדיין צריך להתייחס לאפשרות שמישהו מבחוץ יקרא לTHREAD. ובכלל, יש המון מקרים בJAVA שמכריחים אותך לעטוף דברים בTRY וCATCH, אפילו אם אתה לא מתכוון לעשות כלום עם השגיאה...
 

neko

New member
הערה: כמובן שבמקום לעטוף בTRY

וCATCH תמיד אפשר להגדיר את המתודה כזורקת INTERRUPTEXCEPTION ואז הכל ירוץ בכיף, ואם תזרק הEXCEPTION המשתמש כבר יגלה את זה...
 

roterl

New member
זה לא בהכרח - להתעלם ממנה

ב JAVA יש הרבה אובייקטים שיכולים לזרוק שגיעה (לא בהכרח זורקים - אבל יכולים). ואם יתכן שהאובייקט יזרוק שגיעה, השפה עצמה מחייבת לטפל באפשרות הזו: או ע"י טיפול או ע"י העברה לפונקציה הקוראת (מה שקורה בשפות כמו C++ אם לא מטפלים) מכיוון שלא צפוייה בעיה במקרה פשוט זה ניתן "להתעלם" מהשגיאה, או כמו שצויין למטה, להעבירה לפונקציה הקוראת (ואז זה בעצם כמו לא לטפל כלל בC++)
 
למעלה