2014-11-05 3 views
1

Я использую eclipse luna как IDE. Я работаю в веб-приложении. Когда я код в javascript, иногда я забываю поставить точку с запятой, но все по-прежнему работает нормально, если мой javascript запускается в браузере.Nashorn - debug javascript run in Nashorn

Но когда я запускаю мой JavaScript в Nashorn, он выдаст ошибку, потому что я не поставил точку с запятой

ошибку говорят с

nashorn Error: :1:68 Expected ; but found var ..... ... ... in at line number 1 at column number 68

Проблема заключается в том, консоль всегда показывает мне ошибка в строке номер 1, я думаю, потому что nashorn читает мой файл javascript как одну строку, но, честно говоря, мой javascript-файл содержит много строк.

Трудно найти ошибку, потому что консоль всегда говорит, что ошибка в номере строки 1.

Я знаю, что что-то случилось с моим кодом, но я не знаю, как это исправить.

Nashorn.java

public class Nashorn { 

    public Nashorn() { 
    } 

    public static String readFileAsText(String theUrl){ 
     String allLine = ""; 
     try { 
      URL url = new URL(theUrl); 
      BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 

      String inputLine = ""; 
      while ((inputLine = in.readLine()) != null){ 
       allLine += inputLine; 
       //System.out.println("read : "+inputLine); 
      } 
      in.close(); 
     } catch (MalformedURLException e) { 
      System.out.println("url Error: "); 
     } catch (IOException e) { 
      System.out.println("I/O Error: "); 
     } 
     return allLine; 
    } 

    public static void main(String[] args) { 
     ScriptEngineManager scriptEngineManager = new ScriptEngineManager(null); 
     ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn"); 

     try { 
      //readFileAsText 
      String room = Nashorn.readFileAsText("http://localhost:8080/monsterpuzzle/data/Room.js"); 
      scriptEngine.eval(room); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      System.out.println("nashorn Error: "+e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 

Room.js

var Room = function(){ 
    this.test = function(){ 
     print("lalala"); 
    }; 
} 

var room = new Room(); 
room.test(); 

моя проблема:

Nashorn всегда показывает мне ошибку в строке номер 1. Однако, ошибка не указана в строке 1, а в другой строке , Я думаю, это происходит потому, что nashorn читает всю мою строку кода как одну строку.

мой вопрос:

Как это исправить?

(так что если есть ошибка в строке 6, консоль будет говорить об ошибке в строке 6 не строка 1)

+0

К сожалению, я никогда не использовал Насхорн поэтому я могу только попытаться дать вам советы ... как правило, когда мы видим ошибки в строке 1 это потому, что Javascript был минимизирован. Может быть, есть какой-то вариант в nashorn/eclipse, чтобы включить автоматическую мини-фильтрацию, и этот вариант был бы включен? – Joel

ответ

3

Ваш JavaScript оседает в виде одной строки, потому что вы делаете это одна линия.

while ((inputLine = in.readLine()) != null){ 
    allLine += inputLine; 
    //System.out.println("read : "+inputLine); 
} 

Попробуйте это:

while ((inputLine = in.readLine()) != null){ 
    allLine += inputLine + "\n"; /* ADD NEWLINE CHARACTER AT END OF LINE */ 
    //System.out.println("read : "+inputLine); 
} 
+0

извиниться за долгую реакцию .. я думаю, никто не будет здесь .. я уже пытаюсь сделать свой код раньше, но все равно имею ошибку .. вместо этого прочитал всю строку .. я в конечном итоге с eval ("load ('" + myFile + "'); "); – user3578021

Смежные вопросы