0

この例外に関する他の質問を調べましたが、一般的な問題はスキャナーがあまりにも早く閉じられることであると思われますが、ここでは当てはまりません。これが私のコードで、問題行の上にコメントがあります。

    public void windowOpened(WindowEvent arg0) {

    Scanner input = null;

    try {
        input = new Scanner(new File("/home/brian/workspace/Color Sampler/src/Data.txt"));
    } catch (FileNotFoundException e) {
        System.exit(1);
    }

    int i = 0;
    int nR, nG, nB;
    String nName;
    while(input.hasNextLine())
    {
        // These lines are throwing the exception
        nName = input.next();
        nR = input.nextInt();
        nG = input.nextInt();
        nB = input.nextInt();

        ColorSampler.colors[i] = new myColor(nName, nR, nG, nB); 

        i++;
    }

    ColorSampler.currentColor = ColorSampler.colors[0];
    System.out.println(ColorSampler.currentColor.red);

}

これが私が得ている例外です:

Exception in thread "AWT-EventQueue-1" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:855)
at java.util.Scanner.next(Scanner.java:1364)
at WindowDestroyer.windowOpened(WindowDestroyer.java:57)
at java.awt.Window.processWindowEvent(Window.java:1972)
at javax.swing.JFrame.processWindowEvent(JFrame.java:290)
at java.awt.Window.processEvent(Window.java:1933)
at java.awt.Component.dispatchEventImpl(Component.java:4649)
at java.awt.Container.dispatchEventImpl(Container.java:2103)
at java.awt.Window.dispatchEventImpl(Window.java:2588)
at java.awt.Component.dispatchEvent(Component.java:4475)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:675)
at java.awt.EventQueue.access$300(EventQueue.java:96)
at java.awt.EventQueue$2.run(EventQueue.java:634)
at java.awt.EventQueue$2.run(EventQueue.java:632)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:108)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:119)
at java.awt.EventQueue$3.run(EventQueue.java:648)
at java.awt.EventQueue$3.run(EventQueue.java:646)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:108)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:645)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

ここで何が問題になるのかわかりません。誰か助けてくれませんか?

4

1 に答える 1

0

スキャナーでは、デフォルトで空白を使用してトークンを検索します。特定の読み取りでトークンが見つからない場合は、見つかるまでソースからすべてのデータを読み取り続けます。

Scanner.next() からのソース

while (true) {
    String token = getCompleteTokenInBuffer(null);
    if (token != null) {
        matchValid = true;
        skipped = false;
        return token;
    }
    if (needInput)
        readInput();
    else
        throwFor();
}

したがって、これを念頭に置いて、ファイル内のトークンを定義するために空白を使用していることを確認してください。

于 2014-12-03T17:01:22.697 に答える