Loading class files
I've been having a problem with something I have been making and I need some help.
I want to have a user use a file chooser to choose a class file and my program will run it for them in an internal frame. I can do it if I write the class into the code like:
SomeClass Share = new SomeClass();
JInternalFrame j = new JInternalFrame(Share.getTitle(), true, true, true, true);
Toolkit theKit = j.getToolkit();
Dimension wndSize = theKit.getScreenSize();
j.setLocation(wndSize.width/4, (wndSize.height/4)-50);
j.setSize(wndSize.width/2, (wndSize.height/2)+100);
j.setContentPane(Share.getContentPane());
j.setJMenuBar(Share.getJMenuBar());
Share.dispose();
j.setVisible(true);
deskTop.add(jif);
But I want the user to be able to select what class goes in instead of SomeClass (as in the example)
I hope this made sense, but I really need the help! Thanks
If it's in the classpath & you remember to slice off the ".class" ending then buckman1's code should work well. However you may not be able to guarantee that the class is in the classpath! To do this use java.io to load the class file into a byte[] one way or another. Then use an instance of a subclass of ClassLoader (or SecureClassLoader) to load the class. This subclass must expose the method defineClass(String name, byte[] b, int off, int len) or equivalent so that you can load the class out of the byte array. Note that each instance of a class loader has it's own "namespace" for loaded classes! This may make it more tedious for you or be very useful if you need to load in two different classes called foo.class! (You will still have to use a common base class or interface.)
Similar Messages
-
Loading .class files for reflection
I'm trying to write a program that lets the user select thier .class files to gather
information about those classes with reflection.
I can't figure out how to get ClassLoader to load .class files outside the program
directory.I've tried both these options, and spent some time on it too,
but failed. If can't find a class that can load clases form a URL
how can I write my own ClassLoader that does it.
The ClassLoaders all seem to assume that they already know where
to look for the class files. Perhaps if I could tell them where to look,
but I don't see how. -
Finding loaded Class file from particular Jar
Hi,
I have multiple jars containing same class file.
How can I find out that the loaded Class file belongs to particular jar?
Thanks
madanIn most cases it's possible with ProtectionDomain and CodeSource:ProtectionDomain pd = YourClass.class.getProtectionDomain();
CodeSource cs = pd.getCodeSource();
if (cs != null) {
System.out.println("It came from " + cd.getLocation());
} else {
System.out.println("Location unknown.");
}For further information see
[url http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#getProtectionDomain()]http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#getProtectionDomain()
http://java.sun.com/j2se/1.4.2/docs/api/java/security/ProtectionDomain.html
http://java.sun.com/j2se/1.4.2/docs/api/java/security/CodeSource.html -
Loading class file stored in BLOB field
- I am able to store and retrieve Java files and XML files in and from a BLOB field, but when I store a class file and try and load it using Class Loader, it us unable to load the class. The size of the class file increases by 1 byte when I retrieve it from the database. Is this some security feature by the JVM? Is it not possible to store, retrieve and load a class file from a database table?
Thanks
HariniHi,
First, I would suggest you use fiddler (http://www.telerik.com/fiddler) to compare these two different client requests, second, please try to use Azure Storage Explorer (http://azurestorageexplorer.codeplex.com/) to do
this instead of the Azure Web Storage Explorer.
Best Regards,
Jambor
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
I have placed my jar file in c:\tomcat6\webapps\my-application\WEB-INF\lib\myjarfile.jar
But, after restarting tomcat6, when i try to import the class file contained in the myjarfile.jar in a servlet, it says
ProcessFileUpload.java:4: package test.test1 does not exist
import test.test1.*;
^It clearly tomcat's class loading problem.
As i unzipped my jar and placed the packagefolder structure to
c:\tomcat6\webapps\my-application\WEB-INF\classes\testand it works perfectly.
Anyone knows its workaround? please suggest if any configuration changes is required in tomcat or so.
Thanks.
---SujoyThank you gimbal2 . There was error in creating the jar file myjarfile.jar.
But, now I have created it again and placed it in place
c:\tomcat6\webapps\my-application\WEB-INF\lib\myjarfile.jarand tried to use one on the Class file included within the jar to compile my servlet. But, still I am getting error at servlet compilation time. I want to place executable jar files in
c:\tomcat6\webapps\my-application\WEB-INF\lib\myjarfile.jar and compile my servlet and execute the servlet.
I DO NOT WANT TO unzip the jar, placing all unzipped files to
c:\tomcat6\webapps\my-application\WEB-INF\classes\ folder and comiple my servlet and execute the servlet. But, I am failing to user WEB-INF\lib\ folder facility....please help me why i am not getting class files from WEB-INF\lib\ folder.
If you please see the small code bit and tell me any possible error that would be very helpful.
Step 1: my library java file MyClass.java
package test.test1;
public class MyClass {
String myName = "Default return string value";
public void setMyName(String varName) {
this.myName = varName;
public String getMyName() {
return this.myName;
}Step2 : Creating jar file of my library class files
C:\jdk1.6\bin>jar cvf myjarfile.jar test
added manifest
adding: test/(in = 0) (out= 0)(stored 0%)
adding: test/test1/(in = 0) (out= 0)(stored 0%)
adding: test/test1/MyClass.class(in = 452) (out= 296)(deflated 34%)
adding: test/test1/MyClass.java(in = 230) (out= 140)(deflated 39%)
C:\jdk1.6\bin>Step3 : Double checking the created jar file content by listing its content
C:\jdk1.6\bin>jar tf myjarfile.jar
META-INF/
META-INF/MANIFEST.MF
test/
test/test1/
test/test1/MyClass.class
test/test1/MyClass.java
C:\jdk1.6\bin>Step4 : Placed myjarfile.jar to
c:\tomcat6\webapps\my-application\WEB-INF\lib\Step5 : Restarted standalone Tomcat6 in my Windows XP SP2.
Step6 : Created a simple servlet LibFolderTest.java within my-application\WEB-INF\classes\ folder with code
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import test.test1.*;
public class LibFolderTest extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
MyClass mc = new MyClass();
out.println(mc.getMyName());
}Step7 : Tried to compile my servlet LibFolderTest.java and got the following error
LibFolderTest.java:4: package test.test1 does not exist
import test.test1.*;
^
LibFolderTest.java:11: cannot find symbol
symbol : class MyClass
location: class LibFolderTest
MyClass mc = new MyClass();
^
LibFolderTest.java:11: cannot find symbol
symbol : class MyClass
location: class LibFolderTest
MyClass mc = new MyClass();
^
3 errorsThe above servlet compilation error on Step7 is telling me that myjarfile.jar is not loaded by Tomcat6 or not available for use when compiling servlet. I want to use myjarfile.jar from within WEB-INF\lib\ folder but I can not. please help.
---Sujoy -
hai forum,
Plz help me out regarding this trouble.
I have extracted class files of a jar file into a local directory D:\myClass.
Now i need to access these class files.I loaded the path D:\myClass using URL ClassLoader.
File file = new File("D:myClass");
URL url = file.toURL();
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls);
Class c = cl.loadClass(classname);The rest of the code is for listing the methods of the class file.But the class file is not getting loaded and thus the methods are not listed.
Has it got anything to do with the way i have extracted and stored the class files?
Plz help me identify my mistake.
Thank you.Hi, I will borrow this thread to discuss my problem with loading a class file.
How do you use the class when you have loaded it?
I'm using this code:
File file = new File("C:\\Foo\\Foo.class");
URL url = file.toURL();
URL[] urls = new URL[]url;
ClassLoader cl = new URLClassLoader(urls);
Class c = cl.loadClass(cl.getClass().getName());
Object o = c.newInstance(); <-- This can't be done, my applet just stops and starts to wait or something. I don't get any exception or anything.
The class Foo.class has a constructor that's prints some text and a function that can print some other text. Is it possible to call that function in some way? -
ClassNotFoundException trying to load classes in a .war file inside an .ear file
Hi. I've deployed an EJB2 enterprise app as an ear file on WebLogic 6
without errors. The ear file contains web app and ejb components in war and
jar files. The web component is set to be the default web app in the
config.xml file. Everything deploys without error messages.
My problem is that I get ClassNotFoundExceptions when I try to invoke a
servlet (via its servlet-mapping) or do Class.forName() on any class file in
the war file.
I see in '.wl_temp_do_not_delete' that the ear file has been decomposed into
the ejb jar and web war files. The war file is not 'exploded' into a
directory structure, however (as the console.war is). Is this an error
(should the class packages in the war file be 'exploded'?)
I don't see a tag in the web.xml, config.xml, or application.xml that tells
the server to explode the war file--is there one?
Note that if I manually copy the exploded class folders into the
'_tmp_war_myserver_myserver_<<webappname>>' directory (and not, curiously,
into a WEB-INF/classes subdirectory of that directory), the servlets and
other classes load correctly. Also, jsps and html files load just fine
without exploding the war file.
Note also that the server complains about not being able to find the
classes, even though it reports that the decomposed war file is in the
classpath. Is there a problem loading class files from a .war file (because
the namespace is different, with root classes located in WEB-INF/classes
rather than the .war file's root?)
Also, in the application.xml file, what is the meaning of the
<context-root></context-root> element? What should its value be? What if
you leave it blank?
Thanks for any help,
Reid
Is there a way to add jar libraries to the Oracle JVM CLASSPATH? Is this the same as the system's CLASSPATH env. variable?
Thank you!
<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by Alex McClennan ([email protected]):
The package prefix in the code extract was correct - i.e. "oracle.aurora.jndi". A value of "oracle.aurora.jndi.*" would be incorrect.
The problem is that the context factory implementation specified (com.evermind.server.ApplicationClientInitialContextFactory
) can't be found, the mostly likely reason being that the library containing the class isn't on the classpath.
Cheers,
ax<HR></BLOCKQUOTE>
null -
Failover to loading classes from codebase?
The Java Plug-In fails over to loading class files from codebase when the jars specified do not contain the class in question.
I need this same behavior from Java Web Start -- in part because I'd like to convert some applets and in part because due to customization, reflection, etc, it is not possible for me to force all class files to reside in the jars. Some will only be found in the codebase.
Is there any way to accomplish this with Java Web Start? Or do we have to use another JNLP implementation? I understand performance is best when the jars are complete, but why did Sun make Java Web Start's behavior so inconsistent. [This is not the only case of this, but I'll keep my other questions/gripes on this matter to other threads.]I fully agree with your opinions on the environment variables such as CLASSPATH, PATH etc.
But my problem is: I want to force the application to load the classes over RMI from the codebase specified by the other machine first before trying to load the classes from its own class path specified by -cp or whatever mechanisms.
In other words, I want to load the classes remotely instead of locally on the hard drive if the classes with the same names exist locally. -
Handling .class files insite java process
Hello folks
I have a question regarding JVMPI and JVM: I have created a small proff-of-concept program that handles JVMPI_EVENT_CLASS_LOAD_HOOK and JVMPI_EVENT_CLASS_LOAD events. After my class (simple Test.java with System.out.println) has beed loaded (*CLASSLOAD_HOOK event) I remembered pointer and size of .class file in memory of java process. Then, after CLASSLOAD event I filled this memory with zeroes (memset) to see if Test.class will execute normally. And it did worked fine. My question is: does java process need this memory after JVMPI_EVENT_CLASS_LOAD event? Can I safely override .class file data?
Best Regards
BoloekAt some point, the JVM writes the contents of the
class file into memory that's accessible via coredump.
Otherwise it couldn't execute the bytecodes. If you
zero out the memory where the physical .class file was
loaded, it won't affect the memory where the actual
class is stored.you are wrong :-) I did some testing and I caught three events:
- LOADHOOK where I remembered pointer to .class file and size of it
- _LOAD where I zeroed this memory
- JVMSHUT_DOWN where I caused SIGSEGV to force coredump.
I tested two cases: with and without clearing memory and then searched two different core-files for content of *.class file. I only found it in core dumped in a situation when I did not use memset to clear memory. It is because (as I assume) java process after loading .class file makes some optimisations to efficiently execute bytecode so representation of my code exists in memory of proces but in unreadable, undocummented and undecompilable (at least for non jvm developers) format which is characteristic to particular JVM implementation
Someone who wants your code badly enough is going to
get it.sure but I try to make him this task as difficult as I can ;)
Best Regards
Boloek -
HELP: ClassLoader cannot find .class file
Hi,everybody:
I'm working on a project of auto-testing, and need the java.lang.ClassLoader to load the to-be-tested java file.
It can be simply described as the following code:
public class tt {
public static void main(String[] args) throws Exception{
Class testClass;
String testClassName="TestExample";
String path = System.getProperty("java.io.tmpdir");
URL[] urls = {new URL("file://" + path )};
ClassLoader testCaseLoader = new URLClassLoader(urls);
testClass = testCaseLoader.loadClass(testClassName);
The process is that, put the to-be-tested file to a certain directory, compile it, and finally load it. For example, in the above code, i want to load the class "TestExample".
But it always report the exception: java.lang.ClassNotFoundException: TestExample .
Note, cannot put the to-be-loaded .class file in the same directory with the loading-code, or the loading-code will defaultly find the to-be-loaded .class file , and there would be no exception.
I use jdk6.
I really cannot figure out the problem. Could anyone help me? Thanks a lot.MyCoy wrote:
To malcolmmc:
thanks. but what is FQN ?
Fully Qualified Name
That is, the class name including the package name. Eg java.lang.Object -
How to Load a class file base on .class file name???
Hi,
Can anyone help me?
1) Based on filename (d:\temp\bla.class), I want to load this bla.class and get the actual package of this class.
example:
package something.temp;
public class bla
I want to load the file base on filename and get the package of the class. Is it possible ?
Thank you.Hi nikki96,
It will not work. I will get java.lang.NoClassDefFoundError eventhough I extends classloader to use the findClass(String filename);
Example:
import java.security.*;
import java.util.Enumeration;
import java.util.NoSuchElementException;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
import sun.misc.Resource;
import sun.misc.URLClassPath;
public class MyURLClassLoader extends ClassLoader
String host;
int port;
public Class findClass(String name)
try
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
} catch(Exception e)
e.printStackTrace();
return null;
private byte[] loadClassData(String name) throws Exception
// load the class data from the connection
File file = new File(name);
InputStream is = new FileInputStream(file);
long length = file.length();
// You cannot create an array using a long type.
// It needs to be an int type.
// Before converting to an int type, check
// to ensure that file is not larger than Integer.MAX_VALUE.
if (length > Integer.MAX_VALUE) {
// File is too large
// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
// Close the input stream and return bytes
is.close();
return bytes;
Problem: The class file is not in the proper package (d:\temp\bla.class) where the proper package is d:\something\temp\bla.class.
Objective: I just want to base on the bla.class (no matter where is it located), then get the package of the classfile (bla.class) like example something.temp.
Simple as that but I don't know how to do :(. -
How to load a .class file dynamically?
Hello World ;)
Does anyone know, how I can create an object of a class, that was compiled during the runtime?
The facts:
- The user puts a grammar in. Saved to file. ANTLR generates Scanner and Parser (Java Code .java)
- I compile these file, so XYScanner.class and XYParser.class are available.
- Now I want to create an object of XYScanner (the classnames are not fixed, but I know the filename). I tried to call the constructor of XYScanner (using reflection) but nothing works and now I am really despaired!
Isn't there any way to instantiate the class in a way like
Class c = Class.forName("/home/mark/XYScanner");
c scan = new c("input.txt");
The normal call would be:
XYLexer lex = new XYLexer(new ANTLRFileStream("input.txt"));The problem using reflection is now that the parameter is a ANTLRFileStream, not only an Integer, as in this example shown:
Class cls = Class.forName("method2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Method meth = cls.getMethod("add", partypes);
method2 methobj = new method2();
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = meth.invoke(methobj, arglist);
Integer retval = (Integer)retobj;
System.out.println(retval.intValue());Has anyone an idea? Thanks for each comment in advance!!!Dump all of your class files into a directory.
Use the File class to list all files and iterateover
the files.NastyNot really, when you are dynamically creating code, I would expect the output to be centralized, not spread out all over the place.
>
Use a URLClassloader to load the URL that isobtained
for each file with file.toURI().toURL()(file.toURL()
is depricated in 1.6)Wrong, the URL you give it must be that of the
directory, not the class file.No, I did this quite recently, you can give it a specific class file to load.
>
Load all of the classes in this directory, thatway
any anonymous classes are loaded as well.Anonymous classes automatically loaded when the real
one isIt can't load it if it doesn't know where the code is. Since you haven't used a URL classloader to load once class file at a time, you would never encounter this. But if you loaded a class file that had an anonymous classfile it needed, would it know where to look for it?
>
From this point you should be able to just get a
class with Class.forName(name)No. Class.forName uses the classloader of the class
it's called in, which will be the system classloader.
It won't find classes loaded by a URLClassLoader.got me there. -
Plug-in load class error while running portalapp.xml file in NWDS7.0
hi,
im facing a problem in NWDS7.0 while running portalapp.xml file im getting error realted some plug-in load class error.
Even 3 times i have re-installed but still getting same error.
Please help me how to over come this. This is error im getting :
Please open this link with Firefox so that you can able to see error.
http://www.imageurlhost.com/images/jri5lj7lpftu23ejyye0_Error.jpg
Regards,
prasad.Dear Prasad
Please right click on portalapp.xml > open with > check all the available editors.
Also restore default edition in NWDS. Go to windows > preference > Workbench OR Web editors > click on restore default and Apply and then Ok.
then close the NWDS and open it.
Hope it will helps
Best Regards
Arun Jaiswal -
How to load binary content of a .class file?
Hello everyone,
I want to load the binary content of a .class file in a dynamic approach. In more detail, I want it to work in the following approach. When given the name of a class, I can retrieve the binary content of the .class file. I have written the following sample but it does not work. Can anyone help to find what is wrong with my sample? How to achieve my goal?
String className = this.getClass().getName();
InputStream inputStream = this.getClass().getResourceAsStream (className);When executing the above code, the inputStream is always returned as "null".
Thanks in advance,
GeorgeThanks ruthf104,
I haven't tested this, but I think you will need to
transform the class name
"test.Foo"
into the resource path
"/test/Foo.class"
ie change '.' to '/', append '/' at the beginning
and ".class" at the end.
See the following paragraph from the
Class.getResourceAsStream specification:
"This method delegates the call to its class loader,
, after making these changes to the resource name: if
the resource name starts with "/", it is unchanged;
otherwise, the package name is prepended to the
resource name after converting "." to "/". If this
object was loaded by the bootstrap loader, the call
is delegated to
ClassLoader.getSystemResourceAsStream."
By these rules, the method will not be able to
automatically transform the class name into a
resource path for you (it doesn't append the
".class"), so you'll have to do it yourself.I have verified that your approach is working!
regards,
George -
Loading Java Class File in JSP page
I'm trying to load a java class file from a jsp page.
(e.g. MyFile.java <-- Source "MyFile.class<--Class file of MyFile.java")
jsp page
<%@ include file = "MyFile.class" %>
<HTML> // HTML Tags are here
MyFile.java
A normal java source file that has "public static void main" in it.
My jsp page can display it's contents, 'except' for showing e.g. "1235%%215648%%public%%$$@##" through out the page...
My guess is that it can't display my java class file..
Can anyone please help me solve this problem of mine ?
Thanks in advance : )
Yours Sincerely,
RainbowEnergiesThis is my JSP file.
<HTML>
<HEAD>
<TITLE>Activity Games</TITLE>
</HEAD>
<%
String name = "";
String id = "";
name = session.getAttribute("name").toString();
session.setAttribute("name",name);
id = session.getAttribute("id").toString();
session.setAttribute("id",id);
%>
<BODY bgcolor="#cc99ff" text="#000000" link="#E3E3E3" vlink="#CCCCCC" alink="#FF0000">
<H3><%=name%>, you have enter Activity Games</H3>
<%@ page import="Games.Lufia.*" %>
<%Lufia lufia = new Lufia();%>
</BODY>
</HTML>
After I execute...
An error occurred at line: 18 in the jsp file: /jsp/ActivityGames.jsp
error: File C:\Program Files\Apache Tomcat 4.0\webapps\website\WEB-INF\classes\Games\Lufia\Lufia.class does not contain type Games.Lufia.Lufia as expected, but type Lufia. Please remove the file, or make sure it appears in the correct subdirectory of the class path.
Generated servlet error:
C:\Program Files\Apache Tomcat 4.0\work\Standalone\localhost\website\jsp\ActivityGames$jsp.java:85: Class Games.Lufia.Lufia not found.
Lufia lufia = new Lufia();
But if I comment this out....
This is my JSP file.
<HTML>
<HEAD>
<TITLE>Activity Games</TITLE>
</HEAD>
<%
String name = "";
String id = "";
name = session.getAttribute("name").toString();
session.setAttribute("name",name);
id = session.getAttribute("id").toString();
session.setAttribute("id",id);
%>
<BODY bgcolor="#cc99ff" text="#000000" link="#E3E3E3" vlink="#CCCCCC" alink="#FF0000">
<H3><%=name%>, you have enter Activity Games</H3>
<%@ page import="Games.Lufia.*" %>
<%//Lufia lufia = new Lufia();%> <--- comment this out.... (HERE)
</BODY>
</HTML>
The page shows but did not run my java class file..
Thanks again for trying to help me solve this problem of mine. : - )
Regards,
RainbowEnergies
Maybe you are looking for
-
The music player always reverts back to where I started the day before at a low volume and it's driving me mad! On a previous phone with earlier IOS there was the option to play from where the track left off when stopped - how do I find this option n
-
How to reply with stationery in mac mail
How in **** do I reply to an email using stationery in mac mail? Surwely this can;t be an impossibility??
-
Expand the matrix vertically instead of horizontally.
Hi I am using RS 2008. I have a report which is as follows. The column groupings are by year and quarter and row groupings are by category and sub category. The matrix expands horizontally displaying the next year and quarter on next page, instead of
-
What is the best way for using a C++ in the EJB?
What is the best way for using C++ in the EJB ie either 1. Socket programming 2. JNI
-
Data load - Customer and quotation
Hi I need to load customer data from the legacy into SAP using LSMW.. I found the standard program RFBIDE00 for this. Will this program help me load the data for all account groups ? My 2nd question is - Is there any standard prog/BAPI or IDoc to loa