سؤال

أكتب برنامجا يقرأ المدخلات من ملف ثم يطبعه على الشاشة. عندما أقوم بتشغيله دون تناول المدخلات من الملف، فإنه يعمل بشكل جيد تماما. ومع ذلك، في كل مرة أحاول تشغيلها من الملف، يعطيني "استثناء في مؤشر ترابط" الرئيسي "Java.util.nosuchelempession: لا يوجد خط موجود في" الخطأ الذي يحدث كل مكان من المفترض أن يتم قراءته الإدخال. ليس لدي أي فكرة عما يجري.

يفترض أن هذا البرنامج يأخذ المدخلات من المستخدم، وإنشاء كائن صورة، ثم طباعة المعلومات إلى الشاشة. كل شيء يعمل بشكل جيد عندما أقوم بإدخال المعلومات يدويا ولكن عندما أحاول استخدام Java PhotoTest <Test.DAT للحصول على إدخال ملف يتم تقديم رسالة الخطأ هذه:
استثناء في الخيط "الرئيسي" java.util.nosuchelementException: لا يوجد خط موجود
at java.util.scanner.nextline (الماسح الضوئي.java:1516)
في phototest.readphoto (phototest.java: 31)
في phototest.main (phototest.java: 74)

الرمز الخاص بي الذي يحتوي على:

private static Photo readPhoto(Scanner scanner) throws ParseException
{
    Date dateTaken;

    Scanner scan = new Scanner(System.in);

    String subject = scan.nextLine();
    subject = subject.trim();

    String location = scan.nextLine();
    location = location.trim();

    String date = scan.nextLine();
    date = date.trim();
        if (date.equals("")){ //if the date is empty it is set to null
            dateTaken = null;
            }
        else { //if a date is entered, it is then parsed
            DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
            dateTaken = df.parse(date);
            }

    String file = scan.nextLine();
    file = file.trim();
    File photoFile = new File(file);

    //creates a Photo object from the information entered
    Photo Photo = new Photo(subject, location, dateTaken, photoFile);

    return Photo;
}

public static void main(String[] args) throws ParseException
{
    boolean endprogram = false;
    Scanner scan = new Scanner(System.in);

    //creates  a loop so that the user may enter as many photos as they wish
    while (!endprogram)
    {
        System.out.println("Would you like to enter a photo (y/n)?");

        //if the input is anything other than y, the program ends
        if(!scan.next().equalsIgnoreCase("y"))
        {
            endprogram = true;
        }
        else 
        {
            System.out.println(readPhoto(scan));
        }

    }
}
هل كانت مفيدة؟

المحلول

كل شيء يعمل بشكل جيد عندما دخول المعلومات يدويا ولكن عندما أحاول استخدام java PhotoTest < test.dat للحصول على إدخال ل [SIC؟] ملف [...

هل test.dat تحتوي على "y" تأكيدات أيضا؟ عند الانقلاب في ملف stdin, ، يجب أن يكون محتوى هذا الملف بتنسيق قانوني كما لو كان مكتوبا يدويا.


أيضا، أنت تهيئة آخر Scanner مثال stdin على الرغم من أن واحد مرت بالفعل ل readPhoto. وبعد هل أنت متأكد من أنك بحاجة إلى القيام بذلك؟

نصائح أخرى

في ملفك، تحتاج إلى إرجاع حرف في السطر الأخير. سيكون ذلك ما يعادل ما تكتبه يدويا. لاحظ أنه عند كتابة الكتابة، في السطر الأخير، تضغط فوق Enter.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top