2016-02-20 5 views
3

Я написал пример кода:Невозможно выполнить Java код в SciTE

import java.util.Scanner; 

public class abcd { 
    public static void main(String[] args) { 
     System.out.print("please enter a: "); 
     Scanner a = new Scanner(System.in); 
     String b = a.next(); 
     System.out.println(b); 
    } 
} 

Я могу скомпилировать и выполнить этот код с помощью терминала Ubuntu. В SciTe, он компилируется нормально, но когда я запускаю его, я столкнулся с этой ошибкой:

please enter a: Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:862) 
    at java.util.Scanner.next(Scanner.java:1371) 
    at abcd.main(abcd.java:8) 

предложения?

EDIT: Когда я запускаю файл в терминале, я делаю: «java abcd» Scite делает: «java -cp .abcd». Как две команды разные и почему не работает java -cp?

ответ

1

Похоже, что существует ошибка/неправильная реализация при обработке стандартного ввода в SciTE на Linux/Unix.

Описание ошибки и обходной путь в этом PDF-документе: A Problem with SciTE Go Command on Linux

Примечание: это не официальная документация, но это, кажется, соответствует вашей проблемы.

В соответствии с этим документом при запуске Java-программы через команду «Go» на SciTE вход должен выводиться из панели вывода. Однако в Linux это работает неправильно, и это похоже на чтение из пустого потока.

Когда вы читаете из пустого потока, Scanner видит символ конца файла маркер, когда он пытается прочитать значение с помощью next(), nextInt() и т.д. И это бросает NoSuchElementException, как нет входного элемента в потоке.

Ваши варианты, чтобы обойти эту проблему:

  • Попробуйте метод, упомянутый в вышеупомянутом документе, чтобы использовать «Go» в терминале Linux вместо панели вывода.
  • Запустите программу в терминале и запустите команду «Перейти».
  • Используйте другую IDE, которая не имеет этой проблемы.
+0

Спасибо .. Я пробовал и работает ... –

0

Попробуйте использовать hasNext() перед next();

import java.util.Scanner; 
public class abcd { 
    public static void main(String[] args) { 
    System.out.print("please enter a: "); 
    Scanner a = new Scanner(System.in); 
    while(a.hasNext()) { 
     try { 
     String b = a.next(); 
     System.out.println(b); 
     } catch (NoSuchElementException e) {} 
    } 
    } 
} 
0

Я не хочу обидеть, но с использованием hasNext(), как предложено в Alexander's answer не решит эту проблему, это позволит OP только справиться с этим хорошо. Я не думаю, что это то, что он/она ищет.

Теперь я не эксперт любыми средствами и по какой-то причине ваш программный код работает на моей машине ... Но в любом случае, NoSuchElementException выбрасывается, когда ваша программа на велосипеде через итератор объекта и нет ничего больше цикл, несмотря на то, что ваша программа ожидает чего-то там. Быстрый поиск в Java-документах Scanner.next() показывает, что это исключение выдается, если для чтения нет доступных токенов.

Теперь, если бы мне пришлось угадать, я бы посоветовал вам попробовать что-то другое, кроме Scanner.next(), и посмотреть, работает ли это.

Тот факт, что он работает на моей машине, но не на вашем, несколько удивителен, так что вы могли бы предоставить некоторую информацию о том, как вы пытаетесь запустить свою программу? Вы используете его из командной строки по умолчанию? Или в Scite? (Если это так, я действительно не смогу вам помочь, я даже не коснулся Scite).