program doesnt' recognize a .class file - java

it's my first time working with a .class file in java, I saw that a.class file is just a compiled java code, so I figured out I should add this class to my package and it should work like a regular java class file but it didn't, I'm working with Netbeans by the way.
the problem is that I cant use this class, the main class doesn't recognize it, asking me if I want to create a Rational class to fix the error

I am not entirely sure what you want to do with the class file, but my assumption is that you got it already in this form and want to use some of it's methods.
So if this is correct you should put the file in the folder that netbeans uses to store .class files
(in my case build/classes/java/main/Testing):
IDEs almost always store .class files in a separate directory so that you don't have to deal with them, because a .class file is compiled java code and in 99% of the cases you won't touch the .class file but you will change the .java file and compile it to a class file.
Also be careful if your .class file is a part of a package you should replicate the structure of the package like answered here.

Related

How to make VS Code recognize .class file?

I'm trying to use VS Code with java, but I have an issue.
As a student, my teacher gives me a file named Clavier.class.
I have already wrote a programm with another IDE, and when I execute it in the command of Windows, it works without any problem. But, when I put this programm in VS Code, it doesn't recognize Clavier.saisirInt, which is a static method in Clavier.class. I guess that VS Code can't use a class which is in a File.class, but is there a way to make it works ?
Here is an image of my workspace and you can see the error at the bottom
I assume your lib/ folder is placed onto the execution classpath. If this is the case, that's where compiled class files should go, not next to your sources
Otherwise, you'll need to inspect the java command that actually runs your code to see what/if the -cp argument is set to, or include those class files similar to how the documentation shows for JAR files (which are just zipped packages of class files, and honestly what the teacher should provide instead)
By default, VS Code will reference all JAR files in workspace's lib directory using the glob pattern lib/**/*.jar
And so, you need to adjust this to include lib/*.class after moving your files there

How do external java libraries(jars) actually work?

A lot of times in Java we want to use some functionality that is given to us in the form of JARs(ex. some external library). Most often than not I've noticed that JARs contain .class files.
Since .class files represent compiled bytecode ready for use by the JVM, my question is the following:
How is it that .class files are all that's needed for us to make use of an external library? Maybe a certain JAR contains the class file called: Person.class. How am I able to reference this class in my code when all that the JAR file exposes is a .class file. Isn't the source code(.java file) what's important and what's needed? In the same way that I can have two classes in the same package, I'm able to reference one from the other, because the two .java files(not .class files) are in the same scope(just to give an example).
Excuse me if it's a dumb question, but I really want to understand this.
Even if you write your source code in .java files, they are eventually compiled to form .class files which store bytecode that can be interpreted easily. When you use the jar files in your project, all the class files inside those jar files are included in your classpath, hence enabling you to use them.
So in a JAR package, .class files are sufficient to be used as a dependency.
The Java compiler takes your Java code, which is something that humans can understand, into .class files, which is something that the Java Virtual Machine (JVM) can understand. The JVM then takes the .class files and runs them on your machine.
A .jar file is effectively a collection of .class files packaged up (under the hood, it's really little more than a .zip in disguise). When you add a .jar onto your classpath, you are telling the JVM that it is one more place it should look when it needs a particular class.
I am not sure if I totally got your question, but the JARs are simply compiled javacode, which means, that the semantic/logic etc of the code has not been changed. You need to be able to access the functions/classes etc of the java code you want to use, because otherwise you would not gain any advantage of using a JAR.
One advantage of the JARs is, that the source code of these libraries is already compiled. Since these .class files are compiled .java files, they are all you need to access the functions that were written in the .java file.

How to convert multiple class files to one jar file?

I have decompiled a jar file,
and made two classes from it. After that, I tried to make a new jar file with these two class files, using this code
jar cvf AB.jar WinRegistry.class StartPageChangeApplet.class
The file created without any errors. However, when I look at the source code on Java Decompiler, it says "Internel Error", means that I couldn't make the jar file properly.
Where am I doing doing wrong ?
Please define "made two classes from it". Which java compiler (e.g. javac.exe) are you using? Did you just copy the source to a .class file without compiling maybe?
The java decompiler JAD actually displays source code, not class bytecode. Don't get confused by the title of the editor which is saying WinRegistry.class.
So you can't just save that as a .class. You need to save it as a .java and then compile it to .class using a java compiler:
javac WinRegistry.java StartPageChangeApplet.java
jar cf AB.jar WinRegistry.class StartPageChangeApplet.class
From Eclipse, you can do this way..

Force compile (missing source files)

I'm trying to convert a .jar application into an applet. I've unpacked the .jar file, found the manifest and identified the main class file. I've then reverse engineered it and changed the main class to run as an applet instead. However, it won't compile because I don't have all the source files. Is there anyway to force a compile? It looks like it will work from class files but as I understand it the compiler needs all the relevant source files in order to complete.
As always any advice would be welcomed.
Thanks in advance.
The compiler should be happy if you can put all the relevant classfiles on the classpath. You should not need the original source.
Otherwise, it would be impossible to use any libraries unless you had the original source!
The classfiles need to be in the correct directory structure to match the package, e.g. class com.acme.stuff.MyClass needs to go in com/acme/stuff.

how to use a .class file with .java files

I'm quite green to java (I program in C/C++) and I still haven't figured out how this all works together.
I'm not trying to ask for anyone to do my homework, I'm just confused about some basic java stuff. I have an assignment which wants me to create a maze. The assignment comes with some files which have been pre-implemented and theoretically works. The folder gives me some .java files and some .class files. I opened the .java files and most of them are interfaces with no real code, so I'm assuming the meat of it are in these .class files. My question is, how do I interface with these .class files? do I need to do something like import myClass; if I have a file called myClass.class?
I've tried importing the file directory which these files are contained in (through Eclipse), but it seems the .class files don't show up. I'm guessing it's being processed in the background?
Here's a link to the assignment
http://www.ics.uci.edu/~goodrich/teach/ics23/LabManual/Dark/
Here's the zip file with all the .java and .class files
http://www.ics.uci.edu/~goodrich/teach/ics23/LabManual/Dark/Dark.zip
Thanks in advance!
To add .class files to your project in Eclipse: right-click your project, select properties --> Java Build Path --> Libraries and click on Add Class Folder button. Select the folder with the classes.
No you won't need to import. Place the class files in the same folder so their path is included and simply call on them like normal datatypes.
For example:
myClass mc = new myClass();
or
(new myClass()).myRoutine();
If some method is static
myClass.staticalicious();
importing is used generally when path to classfiles needs to be specified.
Also, .class files are simply compiled .java files.
Oh and lastly, follow Java nomenclature :)
It would be MyClass, not myClass.
.class files are compiled versions of .java files. Assuming that the .class files are named and packaged appropriately you should be able to reference them like this:
Filename: some.package.class
Code: import some.package;
Once you've imported the package you can call methods on the classes contained therein.
As others mentioned, the class files are the compiled Java files, so no there is not "more meat" in them than you can see in the source files. There are class files for interfaces and class files for implementations.
I assume you just use the default package.
So just set the classpath to the directory holding these pre-compiled classes:
e.g. to compile your classes on a Linux/ Unix system:
javac -classpath <dirWithClassFiles>:. .....
and to run the application:
java -classpath <dirWithClassFiles>:. .....
You then can directly use those pre-compiled classes in your own classes.
class files are the binary output of the java compiler. they are the java equivalent of .o files in C or C++ the "meat" in this instance is probably for you to implement.
The java compiler handles finding and including the necessary files, you may need to import some.package.name.*; to avoid having to use full class names (e.g. SomeClass instead of some.package.name.SomeClass)
The class files are compiled classes and you cannot view them in your IDE. Your IDE will allow you to import them but just drop off the extension...
import example.some.Thing;
The .java files are the source files that were most likely used to compile the .class files. I'm sure they are that just for your reference.
Eclipse IDE does not show the .class files. you can add the jars or class files to your project build path. And then you can import the perticular class to your own class to use it.

Categories

Resources