ג'אווה... התחביר נכון?
-
שלום, אני יודע שזה דרישה קצת גדולה מידי...
החלטתי ללמוד ג'אווה, כדי לבנות (ולערוך:) יישומים לC2 (מקווה שזה לא נוגד את חוקי הפורום...)
לקחתי איזה יישום שעושה מסך לבן, פנס, פרקתי אותו, ושיחקתי קצת, בקימפול ה javac עושה לי errors ואני לא מצליח להבין איפה הטעויות, אשמח להחכים!!זה אחד מהקבצים, אני מצרף את הקוד ומיד אח"כ את הפלט של הקומפיילר
package se.light; import javax.microedition.lcdui.Display; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import se.light.Light.1; public class Light extends MIDlet { private Display display; private WhiteCanvas canvas = new WhiteCanvas(this); public Light() { (new 1(this)).start(); } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { this.display = Display.getDisplay(this); this.display.setCurrent(this.canvas); } public void exitMidlet() { try { this.destroyApp(true); } catch (MIDletStateChangeException var2) { } this.notifyDestroyed(); } }
וזה הפלט של הקומפיילר (כל השגיאות בשורה ה13, כמעט, חוץ מהראשונה)
Light.java:6: error: ';' expected import se.light.Light.1; ^ Light.java:13: error: <identifier> expected (new 1(this)).start(); ^ Light.java:13: error: '(' or '[' expected (new 1(this)).start(); ^ Light.java:13: error: not a statement (new 1(this)).start(); ^ Light.java:13: error: not a statement (new 1(this)).start(); ^ Light.java:13: error: ';' expected (new 1(this)).start(); ^ 6 errors
יצויין שאינני מעוניין שתפתרו לי את הבעיות לבד, אלא שתלמדו אותי מהם, ואיך למצוא אותם בעצמי...
Thank you very much.
-
@מוטי-מן זה קוד שהתקבל על ידי דה-קומפילציה של התוכנה, נכון?
על פי מה שאני יודע, הדיקומפיילר נותן את השם 1 באופן שרירותי למחלקה, וייתכן שהקובץ המכיל את קוד המחלקה הוא עם שם שונה. תבדוק כמה קבצים נוצרו על ידי הדיקומפיילר ואם קיים שם קובץ בשם "1". -
@OdedDvir זה הקבצים שיש, 3 סה"כ.
-
@מוטי-מן הקובץ Light$1 נוצר כדי לייצג מחלקה אנונימית שהייתה בקוד המקורי. הדיקומפיילר קרא למחלקה בשם השרירותי הזה. השגיאה היא בשורה:
import se.light.Light.1;
אני לא מבין בג'אווה אבל האינטואיציה שלי אומרת שהפתרון יכול להיות אחת מהאפשרויות:
א. לשנות את השם של הקובץ והמחלקה שהוא מכיל לשם אחר.
ב. לשלב את הקוד מהקובץ Light$1 בתוך הקובץ הראשי ולוותר על הייבוא.
ג. אולי לייבא כך:import se.light.Light$1;
אם שום דבר לא עוזר אולי תשתף כאן את התוכן של Light$1
-
מהנסיון שהיה לי אף פעם לא הצלחתי לעשות דה קומפיילר ולקבל את הקוד הנכון במלואו.
הייתי מציע לך לחפש יישום עם קוד פתוח, ואולי אפילו היישום שעליו ניסית כעת, אולי ניתן למצוא אותו בקוד פתוח.
ומשם תתחיל להמשיך לקמפל ולנסות..
בהצלחה -
dovid