Loading ...
Sorry, an error occurred while loading the content.

Re: Running Java

Expand Messages
  • petermankato
    Michael, Thanks for the details. The problem seems to be when Java is called to run the compiled program. I did a quick video (using Jing) to show what
    Message 1 of 4 , Feb 4, 2008
    View Source
    • 0 Attachment
      Michael,
      Thanks for the details. The problem seems to be when Java is called to
      run the compiled program. I did a quick video (using Jing) to show
      what happens: http://screencast.com/t/BJh2c1cSu

      I know that this is not good form, using a class directly
      (Keyboard.readDouble( )) but this is the second program my students
      write for Java I and I build off of this experience as the semester
      unfolds.

      Thanks for your help in figuring out how to change the script so I can
      use the Compile and Run button.

      Peter

      --- In SubEthaEdit@yahoogroups.com, "michael_j_barber"
      <michael_j_barber@...> wrote:
      >
      > I've taken a look at the Java mode scripts, and I think I know what
      the problem is.
      > However, I don't really do any Java programming, so I can't be
      completely certain. I can tell
      > you what to try in order to get things clear, though, and then maybe
      a solution will
      > become apparent.
      >
      > Here's my thinking. You're seeing an error at compile time, not at
      run time. The "Compile"
      > and "Compile and run" scripts do not call the compiler in the same
      way. Both use "do shell
      > script" to call out to the shell, but not using the same command
      string.
      >
      > "Compile" switches to the directory containing the front SEE
      document, which is your
      > main(). It then compiles the document using javac. You don't really
      say, but I'm guessing
      > that "Compile" works OK?
      >
      > "Compile and run" doesn't work that way. It just calls javac to do
      the compilation. That's
      > equivalent to something like:
      > # cd /
      > # javac -encoding UTF8 path/to/your/mainfile.java
      > Would that give the error you're seeing from "Compile and run"?
      >
      >
      > --- In SubEthaEdit@yahoogroups.com, "Peter K. Johnson"
      <peter.johnson@> wrote:
      > >
      > > When I use the Compile and Run button on the menu bar SubEthaEdit
      compiles
      > > my classes okay but gives me an error that it can¹t find a class
      that is
      > > external to the class containing my main( ). Both the class with
      main( ) and
      > > the class that is called from main( ) are in the same folder.
      > >
      > > If I go into Terminal window and run the program from the command
      prompt it
      > > works perfectly so I know my code is correct. (It¹s also a very
      simple test
      > > program.)
      > >
      > > Is there a script or setting that I can change to get the Compile
      and Run
      > > button to work properly?
      > >
      > > Peter Johnson
      > >
      >
    • michael_j_barber
      After watching your screencast, I think it might be a good idea to extract out the core of the Compile and Run script, and see if we can t better isolate where
      Message 2 of 4 , Feb 4, 2008
      View Source
      • 0 Attachment
        After watching your screencast, I think it might be a good idea to extract out the core of
        the Compile and Run script, and see if we can't better isolate where it goes wrong.
        However, even with that, it might not be feasible to get things working as you hope; I'll
        comment on that after sketching out the structure of what the Compile and Run
        AppleScript is doing.

        All that really happens is that two shell commands are constructed, and passed to the shell
        using "do shell script". Based on the paths in your screencast, the first shell command is:
        javac -encoding UTF8 '/Users/peterj/classJava1/dakeDavid/prjDataType/DebugMe.java
        That would be run, in effect, from the root directory.

        The second shell command is:
        cd "/Users/peterj/classJava1/dakeDavid/prjDataType/" && java 'DebugMe'
        Again, it would be run from root, but it of course makes no difference in this case.

        Those might well be enough for you to see where the error comes from. If not, you could
        try each of those from the Terminal (remembering to "cd /" before each). If it still works,
        then it must be a difference between the shell environment and the environment provided
        by "do shell script". To experiment with that, pulling the core of the AppleScript into a
        separate AppleScript is useful, since then we can run it from Script Editor and put up alerts
        after each of the shell commands. Here's an appropriate AppleScript (more discussion
        follows):

        -- begin script
        -- file path components
        set parentPath to "/Users/peterj/classJava1/dakeDavid/prjDataType/"
        set fileName to "DebugMe.java"
        set javaAppName to "DebugMe"

        -- reconstruct the file path that SubEthaEdit would normally provide
        set filepath to parentPath & fileName

        -- build compile and run strings
        set javacString to "javac -encoding UTF8 " & quoted form of filepath
        set execJavaString to "cd \"" & parentPath & "\" && " & "java " & quoted form of
        javaAppName

        -- compile and show result
        set compileResult to do shell script javacString
        display alert "Compile succeeded" message ("Shell script: " & return & javacString & return
        & return & "Returned:" & return & compileResult)

        -- run and show result
        set runResult to do shell script execJavaString
        display alert "Run succeeded" message ("Shell script: " & return & execJavaString & return &
        return & "Returned:" & return & runResult)

        -- end of script

        With that, it should be feasible to experiment and identify where the problem occurs.
        Unfortunately, I'm not sure that Compile and Run is going to do what you want, even with
        changes. From the screencast, the DebugMe program seems to depend on interaction with
        the user. I don't think that's possible with "do shell script".

        All is not lost, however! There is another approach, which might be suitable. The Terminal
        is scriptable, and has a "do script" action. You could just construct a string containing a
        shell command along the lines of:
        cd "/Users/peterj/classJava1/dakeDavid/prjDataType/" && javac -encoding UTF8
        'DebugMe.java && java 'DebugMe'
        All that could be wrapped up in a new shell script, and added to a local Java mode for your
        class.

        At this point, I'm not sure what else to suggest. I'm willing to help further, if I can, but will
        need some more information.

        --- In SubEthaEdit@yahoogroups.com, "petermankato" <peter.johnson@...> wrote:
        >
        > Michael,
        > Thanks for the details. The problem seems to be when Java is called to
        > run the compiled program. I did a quick video (using Jing) to show
        > what happens: http://screencast.com/t/BJh2c1cSu
        >
        > I know that this is not good form, using a class directly
        > (Keyboard.readDouble( )) but this is the second program my students
        > write for Java I and I build off of this experience as the semester
        > unfolds.
        >
        > Thanks for your help in figuring out how to change the script so I can
        > use the Compile and Run button.
        >
        > Peter
        >
        > --- In SubEthaEdit@yahoogroups.com, "michael_j_barber"
        > <michael_j_barber@> wrote:
        > >
        > > I've taken a look at the Java mode scripts, and I think I know what
        > the problem is.
        > > However, I don't really do any Java programming, so I can't be
        > completely certain. I can tell
        > > you what to try in order to get things clear, though, and then maybe
        > a solution will
        > > become apparent.
        > >
        > > Here's my thinking. You're seeing an error at compile time, not at
        > run time. The "Compile"
        > > and "Compile and run" scripts do not call the compiler in the same
        > way. Both use "do shell
        > > script" to call out to the shell, but not using the same command
        > string.
        > >
        > > "Compile" switches to the directory containing the front SEE
        > document, which is your
        > > main(). It then compiles the document using javac. You don't really
        > say, but I'm guessing
        > > that "Compile" works OK?
        > >
        > > "Compile and run" doesn't work that way. It just calls javac to do
        > the compilation. That's
        > > equivalent to something like:
        > > # cd /
        > > # javac -encoding UTF8 path/to/your/mainfile.java
        > > Would that give the error you're seeing from "Compile and run"?
        > >
        > >
        > > --- In SubEthaEdit@yahoogroups.com, "Peter K. Johnson"
        > <peter.johnson@> wrote:
        > > >
        > > > When I use the Compile and Run button on the menu bar SubEthaEdit
        > compiles
        > > > my classes okay but gives me an error that it can¹t find a class
        > that is
        > > > external to the class containing my main( ). Both the class with
        > main( ) and
        > > > the class that is called from main( ) are in the same folder.
        > > >
        > > > If I go into Terminal window and run the program from the command
        > prompt it
        > > > works perfectly so I know my code is correct. (It¹s also a very
        > simple test
        > > > program.)
        > > >
        > > > Is there a script or setting that I can change to get the Compile
        > and Run
        > > > button to work properly?
        > > >
        > > > Peter Johnson
        > > >
        > >
        >
      Your message has been successfully submitted and would be delivered to recipients shortly.