2013-04-30 2 views
0

Я пытаюсь понять, генерация кода dsl с помощью xText и xPand.Сгенерированный редактор Xpand code 'не содержит основного типа'. Однако у меня есть основной метод

Я открыл пример statemachine xText в eclipse и запущен как новое приложение eclipse. Затем я создал java, содержащий файл test.statemachine в src и скопировал входящий в него код.

следующий файл .java затем создается в папке SRC поколения:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class testing { 

public static void main(String[] args) { 
    new testing().run(); 
} 

protected void doUnlockPanel() { 
    System.out.println("Executing command unlockPanel (PNUL)"); 
} 
protected void doLockPanel() { 
    System.out.println("Executing command lockPanel (PNLK)"); 
} 
protected void doLockDoor() { 
    System.out.println("Executing command lockDoor (D1LK)"); 
} 
protected void doUnlockDoor() { 
    System.out.println("Executing command unlockDoor (D1UL)"); 
} 

protected void run() { 
    boolean executeActions = true; 
    String currentState = "idle"; 
    String lastEvent = null; 
    while (true) { 
     if (currentState.equals("idle")) { 
      if (executeActions) { 
       doUnlockDoor(); 
       doLockPanel(); 
       executeActions = false; 
      } 
      System.out.println("Your are now in state 'idle'. Possible events are [doorClosed]."); 
      lastEvent = receiveEvent(); 
      if ("doorClosed".equals(lastEvent)) { 
       currentState = "active"; 
       executeActions = true; 
      } 
     } 
     if (currentState.equals("active")) { 
      if (executeActions) { 
       executeActions = false; 
      } 
      System.out.println("Your are now in state 'active'. Possible events are [drawOpened, lightOn]."); 
      lastEvent = receiveEvent(); 
      if ("drawOpened".equals(lastEvent)) { 
       currentState = "waitingForLight"; 
       executeActions = true; 
      } 
      if ("lightOn".equals(lastEvent)) { 
       currentState = "waitingForDraw"; 
       executeActions = true; 
      } 
     } 
     if (currentState.equals("waitingForLight")) { 
      if (executeActions) { 
       executeActions = false; 
      } 
      System.out.println("Your are now in state 'waitingForLight'. Possible events are [lightOn]."); 
      lastEvent = receiveEvent(); 
      if ("lightOn".equals(lastEvent)) { 
       currentState = "unlockedPanel"; 
       executeActions = true; 
      } 
     } 
     if (currentState.equals("waitingForDraw")) { 
      if (executeActions) { 
       executeActions = false; 
      } 
      System.out.println("Your are now in state 'waitingForDraw'. Possible events are [drawOpened]."); 
      lastEvent = receiveEvent(); 
      if ("drawOpened".equals(lastEvent)) { 
       currentState = "unlockedPanel"; 
       executeActions = true; 
      } 
     } 
     if (currentState.equals("unlockedPanel")) { 
      if (executeActions) { 
       doUnlockPanel(); 
       doLockDoor(); 
       executeActions = false; 
      } 
      System.out.println("Your are now in state 'unlockedPanel'. Possible events are [panelClosed]."); 
      lastEvent = receiveEvent(); 
      if ("panelClosed".equals(lastEvent)) { 
       currentState = "idle"; 
       executeActions = true; 
      } 
     } 
     if ("doorClosed".equals(lastEvent)) { 
      System.out.println("Resetting state machine."); 
      currentState = "idle"; 
      executeActions = true; 
     } 

    } 
} 

private String receiveEvent() { 
    System.out.flush(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    try { 
     return br.readLine(); 
    } catch (IOException ioe) { 
     System.out.println("Problem reading input"); 
     return ""; 
    } 
} 
} 

Однако это не будет весело с ошибкой «редактор не содержит основной тип», но от того, что я могу видеть это существует

+0

'тестирование' содержит основные. Не уверен, что «редактор» с тех пор, как вы его не включили ... – John3136

+0

Является ли это также в пути Java Build для Java-проекта? Можете ли вы объявить пакет (в противном случае он не будет работать на современных JRE)? – nitind

ответ

0

Папка src-gen, которая содержит сгенерированную testing.java, по умолчанию является простой папкой, а не «исходной папкой». Поэтому необходимо открыть контекстное меню в этой папке и выбрать «Путь сборки» -> «Использовать в качестве исходной папки». После этого вы можете выполнить программу Java.