Bug 349816
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java
index a1d169f..38400d6 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java
@@ -12,11 +12,11 @@
 	/**
 	 * 
 	 */
-	private final SContext model;
+	private SContext model;
 
-	private final IResource resource;
+	private IResource resource;
 
-	private final AParInterpreter aParInterpreter;
+	private AParInterpreter aParInterpreter;
 
 	public EclipseEMFOutputRunner(SContext model, IResource resource,
 			AParInterpreter aParInterpreter) {
@@ -34,6 +34,7 @@
 	 * 
 	 * @see org.ascape.runtime.Runner#run()
 	 */
+	@Override
 	public synchronized void run() {
 		boolean found = false;
 		ArrayList scapeListeners = new ArrayList(getScape().getScapeListeners());
@@ -55,6 +56,7 @@
 	 * @see org.ascape.runtime.Runner#openImplementation(java.lang.String[],
 	 *      boolean)
 	 */
+	@Override
 	public void openImplementation(String[] args, boolean block) {
 		if (aParInterpreter != null) {
 			aParInterpreter.assignValues(new Object[] { getRootScape(), this },
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java
index 18b45ef..8084065 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java
@@ -43,7 +43,8 @@
         super(headless);
     }
 
-    protected void executeOpen(EclipseEscapeRunner eclipseRunner, Object executed, IProgressMonitor monitor) {
+    @Override
+		protected EclipseEscapeRunner executeOpen(Object executed, IProgressMonitor monitor) {
         if (executed instanceof IResource) {
             modelResource = (IResource) executed;
             File file = modelResource.getLocation().toFile();
@@ -53,12 +54,15 @@
                     model = MetaABMPersist.create(file).load();
                     SImplementation impl = model.getImplementation();
                     final String modelClassName = getModelClass(impl);
+                    EclipseEscapeRunner eclipseRunner = createRunner();
                     eclipseRunner.open(modelResource, modelClassName, model.getLabel());
+                    return eclipseRunner;
                 } catch (IOException e) {
                     EscapeIDEPlugin.warn("Couldn't load model.", e);
                 }
             }
         }
+        return null;
     }
 
     protected String getModelClass(SImplementation impl) {
@@ -66,7 +70,8 @@
         return modelClassName;
     }
 
-    protected boolean handleSelect(Object sel) {
+    @Override
+		protected boolean handleSelect(Object sel) {
         if (sel instanceof IResource) {
             IResource res = (IResource) sel;
             if (res.getFileExtension() != null && res.getFileExtension().equals("metaabm")) {
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteParameterHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteParameterHandler.java
index 4ce96b1..99c74ee 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteParameterHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteParameterHandler.java
@@ -17,6 +17,7 @@
 
 import org.eclipse.amp.amf.parameters.AParFactory;
 import org.eclipse.amp.amf.parameters.AParInterpreter;
+import org.eclipse.amp.axf.time.TimeGranularity;
 import org.eclipse.amp.escape.command.ExecuteHandler;
 import org.eclipse.amp.escape.ide.EclipseEscapeRunner;
 import org.eclipse.core.resources.IProject;
@@ -58,26 +59,36 @@
      * @see org.eclipse.amp.escape.command.ExecuteHandler#executeOpen(org.eclipse.amp.escape.ide.EclipseEscapeRunner,
      * java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
      */
-    protected void executeOpen(EclipseEscapeRunner eclipseRunner, Object executed, IProgressMonitor monitor) {
+    @Override
+		protected EclipseEscapeRunner executeOpen(Object executed, IProgressMonitor monitor) {
         if (executed instanceof IResource) {
             modelResource = (IResource) executed;
             IProject project = modelResource.getProject();
             if (modelResource.getFileExtension().equals("apar")) {
                 // a bit awkward..
                 setInterpreter((AParInterpreter) AParFactory.create(null).getInterpreter(modelResource));
-                eclipseRunner.setAutoRestart(false);
                 model = getInterpreter().getRootContext();
+                //If you create the runner sooner the member model and modelResource are null. So the headless run in the output file throw an assertion 
+                EclipseEscapeRunner eclipseRunner = createRunner();
+                if (isHeadless()) {
+                    eclipseRunner.setUpdateGranularity(TimeGranularity.createFrequencyGranularity(Integer.MAX_VALUE));
+                }
+                eclipseRunner.setMonitor(monitor);
+                eclipseRunner.setAutoRestart(false);
                 eclipseRunner.open(project, model.getImplementation().getQualifiedName(),
                                    getInterpreter().getRunName(), getInterpreter().getArgs());
+                return eclipseRunner;
             }
         }
+        return null;
     }
 
     /**
      * @return
      * @see org.eclipse.amp.escape.command.ExecuteHandler#createRunner()
      */
-    protected EclipseEscapeRunner createRunner() {
+    @Override
+		protected EclipseEscapeRunner createRunner() {
         Runner.setDisplayGraphics(!isHeadless());
         EclipseEscapeRunner runner = new EclipseEscapeRunner() {
             private static final long serialVersionUID = 1L;
@@ -87,7 +98,8 @@
              * @param block
              * @see org.ascape.runtime.Runner#openImplementation(java.lang.String[], boolean)
              */
-            public void openImplementation(String[] args, boolean block) {
+            @Override
+						public void openImplementation(String[] args, boolean block) {
                 getInterpreter().assignValues(new Object[] { getRootScape(), this }, null);
                 super.openImplementation(args, block);
             }
@@ -101,7 +113,8 @@
      * 
      * @see org.eclipse.amp.escape.command.ExecuteHandler#handleSelect(java.lang.Object)
      */
-    protected boolean handleSelect(Object sel) {
+    @Override
+		protected boolean handleSelect(Object sel) {
         return sel instanceof IResource && ((IResource) sel).getFileExtension() != null
         && ((IResource) sel).getFileExtension().equals("apar");
     }
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteHandler.java
index 33c57f7..784c165 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteHandler.java
@@ -55,28 +55,31 @@
      */
     @Override
     public final void execute(final Object executed, String name) throws ExecutionException {
-        final EclipseEscapeRunner eclipseRunner = createRunner();
-        if (isHeadless()) {
-            eclipseRunner.setUpdateGranularity(TimeGranularity.createFrequencyGranularity(Integer.MAX_VALUE));
-        }
         Job escapeRun = new Job("Run " + name) {
-            protected IStatus run(IProgressMonitor monitor) {
+        	private EclipseEscapeRunner eclipseRunner;
+            @Override
+						protected IStatus run(IProgressMonitor monitor) {
                 setMonitor(monitor);
-                eclipseRunner.setMonitor(monitor);
                 try {
-                    executeOpen(eclipseRunner, executed, monitor);
-
+                    eclipseRunner = executeOpen(executed, monitor);
                 } catch (RuntimeException e) {
                     setMonitor(null);
                     throw e;
                 }
                 setMonitor(null);
-                return eclipseRunner.getFinishStatus();
+                if(eclipseRunner != null){
+                	return eclipseRunner.getFinishStatus();
+                }else{
+                	return Status.CANCEL_STATUS;
+                }
             }
 
-            protected void canceling() {
+            @Override
+						protected void canceling() {
+            	if(eclipseRunner != null){
                 eclipseRunner.setFinishStatus(Status.CANCEL_STATUS);
                 eclipseRunner.closeFinally();
+            	}
             }
         };
         escapeRun.setPriority(Job.LONG);
@@ -86,11 +89,10 @@
     /**
      * Execute open.
      * 
-     * @param eclipseRunner the eclipse runner
      * @param executed the executed scape resource/name
      * @param monitor the monitor
      */
-    protected abstract void executeOpen(final EclipseEscapeRunner eclipseRunner, final Object executed,
+    protected abstract EclipseEscapeRunner executeOpen(final Object executed,
             IProgressMonitor monitor);
 
     /**
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteJavaHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteJavaHandler.java
index e2934a8..32c28a3 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteJavaHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteJavaHandler.java
@@ -51,14 +51,18 @@
      * @see org.eclipse.amp.escape.command.ExecuteHandler#executeOpen(org.eclipse.amp.escape.ide.EclipseEscapeRunner,
      * java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
      */
-    protected void executeOpen(final EclipseEscapeRunner eclipseRunner, final Object executed, IProgressMonitor monitor) {
+    @Override
+		protected EclipseEscapeRunner executeOpen(final Object executed, IProgressMonitor monitor) {
         // brain dead Java strikes again..
         if (isSupertype(executed, "org.ascape.model.Scape")) {
             IType javaClass = getType(executed);
             IJavaProject javaProject = javaClass.getJavaProject();
+            EclipseEscapeRunner eclipseRunner = createRunner();
             eclipseRunner.open(javaProject.getProject(), javaClass.getFullyQualifiedName(), javaClass
                                .getElementName());
+            return eclipseRunner;
         }
+        return null;
     }
 
     /*
@@ -66,7 +70,8 @@
      * 
      * @see org.eclipse.amp.escape.command.ExecuteHandler#handleSelect(java.lang.Object)
      */
-    protected boolean handleSelect(Object sel) {
+    @Override
+		protected boolean handleSelect(Object sel) {
         return sel instanceof ICompilationUnit || sel instanceof IType;
     }
 
@@ -89,6 +94,7 @@
                 }
             }
         } catch (JavaModelException e) {
+        	//
         }
         return false;
     }