How to give relative path to Runtime.exec - java

Hello all I am trying to run help file(.chm) from netbeans directory with the help of this code
Process proc= Runtime.getRuntime().exec("hh.exe src/MOVECG_Pro.chm");
but problem arises when I try to run outside netbeans because inside jar src folder is not there. Kindly help me how to code it properly

You have placed your chm file inside your source code directory. Clearly that directory is not there when you run the JAR. I guess you want to have a standalone JAR which contains the help file bundled within it.
Since exec delegates to the native platform to interpret the command string as something it can start a subprocess with, you can imagine that there will be trouble with transparently accessing a file buried inside the JAR archive.
So either provide the help file separately, or write code which will extract the help file from the JAR at runtime. Then pass its location to hh.exe.
Let me also make a general statement: since you are writing a Java program here, which is supposed to be platform-independent, your approach with a Windows-specific help file isn't exactly by the book.

Related

Change root directory that backslash points to in Java program

I am having issue running a Java program.
There's a line of code in a jar file that opens the FileInputStream to some file from "/apps/somefile" location,
however I do not have access to the root directory.
The issue is that I am unable to change the code since it is provided in a jar file, as such is there anyway to change to root directory that "/" points to when running the java program?
Here's the line for reference:
FileInputStream fileInputStream = new FileInputStream("/apps/somefile");
The line of code you present does not do anything directly. It is Java source code, and Java is ordinarily compiled to bytecode and presented in that form to the JVM. It sounds like your jar may contain source files along with the compiled class files, which is sometimes done. If that's the case then you can simply unpack the Java sources from the jar, modify them, recompile, and make a new jar from the results.
If you don't have source then you could try decompiling, as another answer suggests. That's a bit nasty, but it probably would work.
Alternatively, what you actually ask is
is there anyway to change to root directory that "/" points to when running the java program?
In fact, there may be, depending on the system on which the code is running. You could conceivably run your program under chroot, which has precisely that effect. That's a distinctly non-trivial exercise, however, and if you don't have access to the root directory (though I'm not sure how you can do anything in that case) then you very likely do not have sufficient access to set up or use a chroot environment, either.
you need to do a decompiler to that jar. You can use : http://jd.benow.ca/
Then you need to change that class that have the InputStream and then compile again and make the Jar file.

How to run or call an exe file from a JAR file which is present in the same directory?

Hello all :) I love stackoverflow where I always find answers but this time I could not so personally asking... Its bit lengthy please go through it.
I am creating a java application where one of my resource is an exe file which I need to call in the java code. But later I would convert the whole java code to a JAR file... and I would add the JAR file and the exe file for the Setup file for installation process. So when I extract the files I want my JAR file to call the exe file while running... I am doing this all in Eclipse :)
So my doubt comes here which path I should put up in the java code... ? So that it will always call the file the exe file from the same directory where the JAR file is also present.. :)
Any help would be great :) Thank you in advance :)
Assuming that you control the whole installation process; and that you also control the script that later starts a JRE to run your JAR within; my suggestion would be: simply use a property here.
In other words; your installer knows that it copied JAR and EXE to D:\example\ for example. Then just make sure that your JAR is started like:
java -jar D:\example\your.jar -D your_path=D:\example
(this is just meant as example, you would have to work that out, probably the \ in there need some special treatment for example)
Then your application can simply query for that system property "your_path" and take the value from there.
Alternatively, you could try this solution that works "pure java".

get the root directory of a maven application

I need to provide a settings file for my program, to which the user should have access to write some of the settings i need.
I created a file under a new directory (called settings) on the root of my application, but i have problem finding it at run time.
I use
File SettingsFile=new File(ClassLoader.getSystemClassLoader().getResource(".").getPath()+"settings/CreateSettings.txt");
When i execute this under eclipse i get
/application/home/dir/target/classes/settings/ZipCreateSettings.txt which is wrong.
If i execute it on terminal using java -jar, i get the correct path,
/application/home/dir/settings/ZipCreateSettings.txt
This would cause me problems cos i need to run the application directly from eclipse and not use the terminal, even though it is going to be executed using the jar when it is up and running.
I cant keep it like that anyway, cos this code might end up in someone else's hands, and they would have no idea what to do with it.
I have also used some other techniques like
new java.io.File("").getAbsolutePath(); but this always gives me the current working directory, so if i execute the jar from /home, i would get /home.
I think the problem might be maven (which i am not familiar with at all) since my code worked with a plain java application some time ago.
Since your file will be located outside your classpath, it is basically outside your application. Your application is not aware of files existing outside it's classpath. So you will need some kind of way to provide the Full/Absolute path to your file. You can't use the classloader in your case.
I suggest you use a system param instead of a hardcoded value. See here

How can I export my program in an executable format (Java, eclipse)?

I have created a program in Java using eclipse that contains a couple of folders with graphics and files that get read from and written to. What I need is a way to export the whole program in some executable format so that anyone can run my program.
I've had a look around online and I notice that people suggest creating an executable JAR file. However I have my reservations about this since I suspect it will choose to ignore the graphics & other files that the program uses, only focusing on the actual source code.
Please could someone suggest a solution to this issue, it is absolutely essential that the files and graphics are packaged up with the rest of the code.
On another related note; at present I'm referencing the files & graphics using files paths that are specific to my computer. If I were to use another solution such as creating an installable program how should I handle these filepaths? Apologies if this is a naive question, however I'm new to this sort of thing.
However I have my reservations about this since I suspect it will choose to ignore the graphics & other files that the program uses, only focusing on the actual source code.
When you think you may have a solution but it doesn't work, you should test that theory.
A jar file is absolutely the right solution for this. However, you need to make sure that Eclipse considers them as resources on the build path so that it will copy them into the jar file. Then you just need to refer to them from the jar file:
On another related note; at present I'm referencing the files & graphics using files paths that are specific to my computer. If I were to use another solution such as creating an installable program how should I handle these filepaths?
Use Class.getResource() or Class.getResourceAsStream() or the ClassLoader equivalents. That will let you load your resources directly from the jar file, without even having separate files on the file system.

find file location in java.io.FileNotFoundException

I have this Java application and I'm using an external Jar and one of the functions is throwing a java.io.FileNotFoundException. I have the file that it's looking for but I have no idea where I'm supposed to put it. Is there any program I can use that can give me the location of the path that it's trying to look at? Thanks.
if you run the application in a debugger, most debuggers allow you to break when an exception is thrown. you could then inspect the local state of the application to determine the relevant path.
you should also probably report this as an enhncement request to the original library author (to include the file name in the thrown exception).
Don't you have to the .class file of the Java class containing that method.If yes, decompile it to view the source code. This is one such decompiler
Also, try to look for any config file like a property file that may have the path information.
You can find the current working directory from System.getProperty("user.dir") and do some hit-trial by placing the file there.
If the exception stack does not give you a hint on where it is looking for the file, and placing it in common places e.g.
in user directory
home directory
current directory etc
does not work, I guess you can decompile the jar and see where it is looking for the file
Well, I doubt it is hardcoded so this will probably not show you exactly where it is looking...but you may want to decompile the class using JAD. This may clue you in on where it is looking.

Categories