コード例 #1
0
  public void processCodeEmbedded(String programText) {
    String canonicalClassName = "";
    String pathOfCanonicalClassName = "";

    String className = "";
    // execute now the compiled code
    int clPos = programText.indexOf("class");
    if (clPos != -1) { // "class" exists
      int afterClassPos = clPos + 6;
      // after the word "class an identifier and a "{" must exist
      String afterProgramText = programText.substring(afterClassPos, afterClassPos + 50);
      StringTokenizer stTok = new StringTokenizer(afterProgramText, " {\n");
      className = stTok.nextToken();
      tempFileName = className + ".java"; // public classes and Java files should have the same name
    } else return;

    String homePath = ".";
    String wholePathName = tempFileName; // homePath+File.separatorChar+tempFileName;
    try {
      // take the program's text and save it to a temporary file
      tempFile = new File(wholePathName);
      FileWriter fw = new FileWriter(tempFile);
      GlobalValues.editorPane.write(fw);
    } catch (IOException ioe) {
      System.out.println("Exception trying to write to " + wholePathName);
      System.out.println(
          "Probably you tried to execute scalalab with direct double-click on the .jar file");
      System.out.println("Correct this problem by making a shortcut to the desktop");
      System.out.println("or with the command:   java -jar scalalab.jar ");
      JOptionPane.showMessageDialog(
          null,
          "Please Start scalalab from a terminal with: java -jar scalalab.jar,  for the external compilation to work properly",
          "Start from terminal",
          JOptionPane.WARNING_MESSAGE);
      return;
    }
    String selectedValue = tempFileName;
    System.out.println("selectedValue = " + tempFileName);
    String[] command = new String[11];
    String toolboxes = "";
    for (int k = 0; k < GlobalValues.ScalaSciClassPathComponents.size(); k++)
      toolboxes =
          toolboxes + File.pathSeparator + GlobalValues.ScalaSciClassPathComponents.elementAt(k);
    System.out.println("current ScalaSciPath = " + toolboxes); // Sterg-Sterg-Sterg

    command[0] = "java";
    command[1] = "-classpath";
    command[2] =
        "."
            + File.pathSeparator
            + scalalab.JavaGlobals.javacFile
            + File.pathSeparator
            + scalalab.JavaGlobals.ejmlFile
            + File.pathSeparator
            + scalalab.JavaGlobals.jsciFile
            + File.pathSeparator
            + scalalab.JavaGlobals.javacppFile
            + File.pathSeparator
            + scalalab.JavaGlobals.gslFile
            + File.pathSeparator
            + scalalab.JavaGlobals.mtjColtSGTFile
            + File.pathSeparator
            + scalalab.JavaGlobals.ApacheCommonsFile
            + File.pathSeparator
            + scalalab.JavaGlobals.numalFile
            + File.pathSeparator
            + scalalab.JavaGlobals.LAPACKFile
            + File.pathSeparator
            + scalalab.JavaGlobals.ARPACKFile
            + File.pathSeparator;
    command[3] = "com.sun.tools.javac.Main"; // the name of the Java  compiler class
    command[4] = "-classpath";
    command[5] = command[2];
    command[6] = "-sourcepath";
    command[7] = command[2];
    try {
      command[10] = tempFile.getCanonicalPath();
      canonicalClassName = command[10];
      pathOfCanonicalClassName =
          canonicalClassName.substring(0, canonicalClassName.lastIndexOf(File.separatorChar));

    } catch (IOException ex) {
      Logger.getLogger(CompileExecutePaneActionJava.class.getName()).log(Level.SEVERE, null, ex);
    }
    command[8] = "-d";
    command[9] = pathOfCanonicalClassName;

    String compileCommandString =
        command[0]
            + "  "
            + command[1]
            + "  "
            + command[2]
            + " "
            + command[3]
            + " "
            + command[4]
            + " "
            + command[5]
            + " "
            + command[6]
            + " "
            + command[7]
            + " "
            + command[8]
            + " "
            + command[9]
            + " "
            + command[10];

    System.out.println("compileCommand JavaEmbedded = " + compileCommandString);

    try {
      Runtime rt = Runtime.getRuntime();
      Process javaProcess = rt.exec(command);
      // an error message?
      StreamGobbler errorGobbler = new StreamGobbler(javaProcess.getErrorStream(), "ERROR");

      // any output?
      StreamGobbler outputGobbler = new StreamGobbler(javaProcess.getInputStream(), "OUTPUT");

      // kick them off
      errorGobbler.start();
      outputGobbler.start();

      // any error???
      javaProcess.waitFor();
      int rv = javaProcess.exitValue();
      String commandString = command[0] + "  " + command[1] + "  " + command[2];
      if (rv == 0) System.out.println("Process:  " + commandString + "  exited successfully ");
      else
        System.out.println(
            "Process:  " + commandString + "  exited with error, error value = " + rv);

    } catch (IOException exio) {
      System.out.println("IOException trying to executing " + command);
      exio.printStackTrace();

    } catch (InterruptedException ie) {
      System.out.println("Interrupted Exception  trying to executing " + command);
      ie.printStackTrace();
    }

    tempFile.delete(); // delete the temporary source file

    if (processUserSelection == false) {

      if (rv == 0) { // compilation success: proceed to run
        command = new String[4]; // the run command
        command[0] = "java";
        command[1] = "-cp";
        command[2] =
            "."
                + File.pathSeparator
                + pathOfCanonicalClassName
                + File.pathSeparator
                + scalalab.JavaGlobals.ejmlFile
                + File.pathSeparator
                + scalalab.JavaGlobals.jsciFile
                + File.pathSeparator
                + scalalab.JavaGlobals.javacppFile
                + File.pathSeparator
                + scalalab.JavaGlobals.gslFile
                + File.pathSeparator
                + scalalab.JavaGlobals.mtjColtSGTFile
                + File.pathSeparator
                + scalalab.JavaGlobals.ApacheCommonsFile
                + File.pathSeparator
                + scalalab.JavaGlobals.numalFile
                + File.pathSeparator
                + scalalab.JavaGlobals.LAPACKFile
                + File.pathSeparator
                + scalalab.JavaGlobals.ARPACKFile
                + File.pathSeparator;
        command[3] = className; // the name of the Scala compiler class

        try {
          Runtime rt = Runtime.getRuntime();
          Process javaProcess = rt.exec(command);
          // an error message?
          StreamGobbler errorGobbler = new StreamGobbler(javaProcess.getErrorStream(), "ERROR");

          // any output?
          StreamGobbler outputGobbler = new StreamGobbler(javaProcess.getInputStream(), "OUTPUT");

          // kick them off
          errorGobbler.start();
          outputGobbler.start();

          // any error???
          javaProcess.waitFor();
          rv = javaProcess.exitValue();
          String commandString =
              command[0] + "  " + command[1] + "  " + command[2] + " " + command[3];
          if (rv == 0) System.out.println("Process:  " + commandString + "  exited successfully ");
          else
            System.out.println(
                "Process:  " + commandString + "  exited with error, error value = " + rv);

        } catch (IOException ex) {
          System.out.println("IOException trying to executing " + command);
          ex.printStackTrace();

        } catch (InterruptedException ie) {
          System.out.println("Interrupted Exception  trying to executing " + command);
          ie.printStackTrace();
        }
      } // rv==0
    }
  }
コード例 #2
0
  public void executeTextExternalJava() {
    int rv = 0; // the return value of the compilation phase

    String className = "";
    // execute now the compiled code
    String programText =
        GlobalValues.editorPane
            .getText(); // get the program's text in order to search for the class's name
    int clPos = programText.indexOf("class");
    if (clPos != -1) { // "class" exists
      int afterClassPos = clPos + 6;
      // after the word "object an identifier and a "{" must exist
      programText = programText.substring(afterClassPos);
      StringTokenizer stTok = new StringTokenizer(programText, " ");
      className = stTok.nextToken();
      tempFileName = className + ".java"; // public classes and Java files should have the same name
    } else return;

    String jarFileName = GlobalValues.jarFilePath;
    // get the user's home path
    String homePath = GlobalValues.fullJarFilePath;
    char JavaPathChar = '/';
    homePath = homePath.substring(0, homePath.lastIndexOf(JavaPathChar));
    try {
      // take the program's text and save it to a temporary file
      tempFile = new File(homePath + File.separatorChar + tempFileName);
      FileWriter fw = new FileWriter(tempFile);
      GlobalValues.editorPane.write(fw);
    } catch (IOException ioe) {
      System.out.println("Exception trying to write to " + tempFileName);
      return;
    }
    // compile the temporary file

    String selectedValue = tempFileName;
    String[] command = new String[6];
    command[0] = "javac";
    command[1] = "-cp";
    command[2] =
        GlobalValues.jarFilePath
            + File.pathSeparator
            + scalalab.JavaGlobals.ejmlFile
            + File.pathSeparator
            + scalalab.JavaGlobals.jsciFile
            + File.pathSeparator
            + scalalab.JavaGlobals.javacppFile
            + File.pathSeparator
            + scalalab.JavaGlobals.gslFile
            + File.pathSeparator
            + scalalab.JavaGlobals.mtjColtSGTFile
            + File.pathSeparator
            + scalalab.JavaGlobals.ApacheCommonsFile
            + File.pathSeparator
            + scalalab.JavaGlobals.jfreechartFile
            + File.pathSeparator
            + scalalab.JavaGlobals.numalFile
            + File.pathSeparator
            + scalalab.JavaGlobals.LAPACKFile
            + File.pathSeparator
            + scalalab.JavaGlobals.ARPACKFile
            + File.pathSeparator
            + scalalab.JavaGlobals.JASFile
            + homePath;
    command[3] = "-d"; // where to place output class files
    command[4] = homePath; //  the path to save the compiled class files
    try {
      command[5] = tempFile.getCanonicalPath(); // full filename to compile
    } catch (IOException ex) {
      System.out.println("Exception in tempFile.getCanonicalPath()");
      return;
    }

    String compileCommandString =
        command[0]
            + "  "
            + command[1]
            + "  "
            + command[2]
            + " "
            + command[3]
            + " "
            + command[4]
            + " "
            + command[5];

    System.out.println("compileCommand Java= " + compileCommandString);

    try {
      Runtime rt = Runtime.getRuntime();
      Process javaProcess = rt.exec(command);
      // an error message?
      StreamGobbler errorGobbler = new StreamGobbler(javaProcess.getErrorStream(), "ERROR");

      // any output?
      StreamGobbler outputGobbler = new StreamGobbler(javaProcess.getInputStream(), "OUTPUT");

      // kick them off
      errorGobbler.start();
      outputGobbler.start();

      // any error???
      javaProcess.waitFor();
      rv = javaProcess.exitValue();
      String commandString = command[0] + "  " + command[1] + "  " + command[2];
      if (rv == 0) System.out.println("Process:  " + commandString + "  exited successfully ");
      else
        System.out.println(
            "Process:  " + commandString + "  exited with error, error value = " + rv);

    } catch (IOException exio) {
      System.out.println("IOException trying to executing " + command);
      exio.printStackTrace();

    } catch (InterruptedException ie) {
      System.out.println("Interrupted Exception  trying to executing " + command);
      ie.printStackTrace();
    }

    tempFile.delete(); // delete the temporary source file

    if (processUserSelection == false) {

      if (rv == 0) { // compilation success: proceed to run
        command = new String[4]; // the run command
        command[0] = "java";
        command[1] = "-cp";
        command[2] =
            "."
                + File.pathSeparator
                + GlobalValues.jarFilePath
                + File.pathSeparator
                + scalalab.JavaGlobals.ejmlFile
                + File.pathSeparator
                + scalalab.JavaGlobals.jsciFile
                + File.pathSeparator
                + scalalab.JavaGlobals.javacppFile
                + File.pathSeparator
                + scalalab.JavaGlobals.gslFile
                + File.pathSeparator
                + scalalab.JavaGlobals.mtjColtSGTFile
                + File.pathSeparator
                + scalalab.JavaGlobals.ApacheCommonsFile
                + File.pathSeparator
                + scalalab.JavaGlobals.jfreechartFile
                + File.pathSeparator
                + scalalab.JavaGlobals.numalFile
                + File.pathSeparator
                + scalalab.JavaGlobals.LAPACKFile
                + File.pathSeparator
                + scalalab.JavaGlobals.ARPACKFile
                + File.pathSeparator
                + scalalab.JavaGlobals.JASFile
                + File.pathSeparator
                + homePath;
        command[3] = className; // the name of the Scala compiler class

        try {
          Runtime rt = Runtime.getRuntime();
          Process javaProcess = rt.exec(command);
          // an error message?
          StreamGobbler errorGobbler = new StreamGobbler(javaProcess.getErrorStream(), "ERROR");

          // any output?
          StreamGobbler outputGobbler = new StreamGobbler(javaProcess.getInputStream(), "OUTPUT");

          // kick them off
          errorGobbler.start();
          outputGobbler.start();

          // any error???
          javaProcess.waitFor();
          rv = javaProcess.exitValue();
          String commandString =
              command[0] + "  " + command[1] + "  " + command[2] + " " + command[3];
          if (rv == 0) System.out.println("Process:  " + commandString + "  exited successfully ");
          else
            System.out.println(
                "Process:  " + commandString + "  exited with error, error value = " + rv);

        } catch (IOException ex) {
          System.out.println("IOException trying to executing " + command);
          ex.printStackTrace();

        } catch (InterruptedException ie) {
          System.out.println("Interrupted Exception  trying to executing " + command);
          ie.printStackTrace();
        }
      }
    }
  }