This discussion is archived
3 Replies Latest reply: Apr 23, 2010 2:00 PM by 794459 RSS

Please help with reflection

843798 Newbie
Currently Being Moderated
hi,

i have an executable Test.jar wrapped inside an executable Test.exe (by jsmooth) that can be launched by dclicking on it (yes i know Test.jar can also be launched by dclicking on it). the main entry point of the app is Test.java.

user renames Test.exe to Tested.exe and dclicks on Tested.exe to run it (yes it does run).
when Tested.exe runs, is there a way for main() of Test.java to know the name of the executable (Tested.exe)?

thanks!
  • 1. Re: Please help with reflection
    DrClap Expert
    Currently Being Moderated
    Not with reflection, no.

    (And before you ask I don't know if there's any other way either. That's really a question about jsmooth anyway since Java classes are not normally run that way.)
  • 2. Re: Please help with reflection
    843798 Newbie
    Currently Being Moderated
    thanks.
  • 3. Re: Please help with reflection
    794459 Newbie
    Currently Being Moderated
    I know this isn't an elegant solution or anything, and you may not even be able to do it this way (it depends on why you're using JSmooth), but you could write your own executable in C (easy if all your executable is doing is telling the system to run the JAR file). Your executable can then get its own name (by default argv[0] in the main function of the executable) and pass that as a command-line argument into the main (String [] args) function of your Java code.

    In other words, you can have an executable whose approximate C code is:
    int main( int argc, const char* argv[] )
    {
            //your command is the concatenation of the two strings specified, the latter of which is the executable's name
            commandString = strcat ("java yourClassName ", argv[0]);
           // if done correctly, issuing this from a C program is like typing commandString into the command line
         system(commandString);
    }
    Your Java main method would then receive the name of the executable and could do whatever with it. Like I said, though, I don't know if this solution is really something you'd want to do.