Sequence of Class Loading in inheritance
Hi,
Is it possible to send a COMMAND to underlying command prompt from JVM?
Actually i want to clear the console on which jvm is running. (in simple language i want to send 'cls' command to console).
I am using Windows XP & Win2k3 Enterprse server.
Thanx in advance,
Nirmit Shah
Is it possible to send a COMMAND to underlying
command prompt from JVM?
Actually i want to clear the console on which jvm is
running. (in simple language i want to send 'cls'
command to console).
I am using Windows XP & Win2k3 Enterprse server.No.
When you open a console window that is an application. In general the term "shell" can used to refer to this application regardless of OS.
When you run the VM it creates another application.
The shell redirects the stderr/stdout pipes of the VM (or any app run) so that it shows in the window that you see.
That however is not the same as when you type something at the command line.
Depending on the shell, and often on other installs on the OS, and even how the shell is run, certain combinations of characters and create certain activity in the window.
That is more likely to occur and be available on unix variants. Windows will be unlikely to have that (it definitely requires additions.)
One standard way to "clear" the screen is to simply print a large number of empty lines. 120 should generally be sufficient and 240 more than sufficient. This has the advantage that it should work on any system.
Similar Messages
-
What's the deal with Lazy Class Loading?
My understanding was that if class B is used in class A, (i.e. imported and used in local code), but class A does NOT
- extend class B
- implement class B
- have a field of class B's type or
- use class B in any of its methods signatures
then class B would not be loaded unless the localised code that uses it was executed.
However, I am of course finding that this is not the case.
So what's the deal?
Why are my classes being loaded when there's no code that uses them?Okay, prepare for some gory details...
My actual code is slightly more complicated than A & B, but the context of the error is the same.
Here is what's happening:
The main method, in class A is creating an instance of A;
The constructor of A creates an instance of B;
The constructor of B calls a static method in C;
The static method in C creates an instance of C.
C contains an instance method M that creates an instance of inner class C.C1, however method M is NOT called from C's constructor, nor will it EVER be called in the (test) application.
Class C.C1 implements interface D.D1.
Neither of classes D or D.D1 are in the classpath (intentionally).
A NoClassDefFoundError is thrown, indicating that D.D1 could not be loaded, with the top method on the stack trace being (from memory) B.<init> (i.e. no mention of C, the only class that refers to D or D.D1).
My assumption was that C.C1 should never be loaded, because it is never used, or that, if it was loaded eagerly, no exception should be thrown until a point at which it is used.
Seeing as the inner classes and the inheritance can complicate things above, I commented out the code that uses C.C1 and D.D1, which results in the following sequence of events (which still fail):
The main method, in class A is creating an instance of A;
The constructor of A creates an instance of B;
The constructor of B calls a static method in C;
The static method in C creates an instance of C.
Difference is here:
C contains an instance method M that creates an instance of class D, however method M is NOT called from C's constructor, nor will it EVER be called in the (test) application.
Class D does not appear in any method signatures or as a field type.
Class D is not in the classpath (intentionally).
A NoClassDefFoundError is thrown, indicating that D could not be loaded, with the top method on the stack trace being B.<init> (i.e. no mention of C, the only class that refers to D).
Again, my assumption is that D should never be loaded, because the only method that uses it is never called.
Why is the JVM attempting to load D and telling me that it can't find it when the application never actually uses D?
Crazy stuff! -
Class Loading Strategy for Security MBeans
Hi, can someone point me to a good reference or explain how security mbeans load referenced classes? I'm trying to reference my auditor class, which is archived in an audit.jar, from within my authentication provider mbean implementation class. I've added the attribute class-path:audit.jar in the manifest file of the mbean jar file containing the authentication provider class. Every time I start the server I get a "NoClassDefFoundError" exception. Any ideas?
Someone else can probably answer with more authority, but I think that statement is true because Java 2 introduced context class loaders, or at least formalized the hierarchical relationship between context class loaders.
Each thread by definition has a context class loader, possibly (probably) through inheritance from its parent thread.
According to the API doc, Class.forName() loads a class using the current class's classLoader, whereas getContextClassLoader().loadClass() loads a class using the thread's context class loader.
I think there could be cases where a context class loader could have access to resoures that the class's class loader doesn't. If anyone can shed more light on this, that would be helpful.
There's some discussion of this here:
http://java.sun.com/products/jndi/tutorial/beyond/misc/classloader.html, mainly in regards to JNI. -
Class loader: saaj-api conflict
I need to load saaj-api from my application which is newer than the one that comes w/ith oc4j 10.1.3 which is loaded by the system class loader with name api from webservices/lib/saaj-api.jar.
remove-inherited doesn't seem to do the trick.
Any suggestions would be appreciated.
Thanks,
Jindong.While I understand where you're coming from, it sounded to me that oc4j lacks the flexibility to allow application to use newer version of certain component.
For example, certain JDK level supports certain JAXP, but there is indeed an extension mechnism to allow application plug in newer JAXP?
I believe other j2ee contains are a lot flexbile in terms of this...I don't think J2EE spec says that applications running in its container can not use newer software components?
I think it only makes sense that the minimum supported level is j2ee 1.4, but nothing should stop applications from having their own version of any thing.
I strongly suggest that this to be considered for what ever release you guys are working on or a work around can be provided for the current version we're using.
Jindong. -
How to load a class dynamically in the current/system class loader
I need to dynamically load a new jdbc driver jar to the current/system class loader... Please note that creating a new classloader will not help since the DriverManager refers to the systemclassloader itself.
Restarting the application by appending the jar to its classpath will solve the problem but I want to avoid doing this.Did you then create a ClassLoader to load the JDBC
driver and then install it into the system as
directed by the JDBC specification (ie
Class.forName(someClassName))?
And then try to use it from a class loaded fromsome
other ClassLoader (i.e. the system class loader)?
If you did not try this please explain why not.O.K. I just looked at the source to
java.sql.DriverManager. I did not know what I was
talking about, as what I suggested above will not
work.
This is my new Idea:
Create a URLClassLoader to load the JDBC driver also
in this ClassLoader you need to place a helper class
that does the following:
public class Helper {
public Driver getJDBCDriver(String driverClassName,
String url) {
try {
Class.forName(driverClassName);
Driver d = DriverManager.getDriver(url);
return d;
catch(Exception ex) {
ex.printStackTrace();
return null;
}Now create an instance of the Helper class in the new
ClassLoader, and call its getJDBCDriver method to get
an instance of the driver (you will probably have to
create an interface in the root class loader that the
Helper implements so that you can easily call it).
Now from the root classloader you can make calls
directly to the returned Driver and bypass the
DriverManager and its restrictions on cross
ClassLoader access.
The only catch here is that you would have to call to
the returned Driver directly and not use the Driver
Manager.This sounds like will work but I did not want to load DriverManager in a new classloader.. I did a hack
I unzip the jar dynamically in a previously known location (which I included in my classpath when launching the app). The classLoader finds the class now though it did not exist when the app was launched !
A hack of-course but works eh .. -
Error building project using kXML2 - "Class loading error: Wrong name"
Hi,
I'm testing the XML-Parser KXML2 and downloaded the latest package, but the minimal version (kxml2-min.zip). I put this file into the directory "%j2mewtk%\apps\KxmlTest\lib" and wrote the lines
import org.kxml2.io.*;
import org.xmlpull.v1.*;
When I try to build the project with the Wireless Toolkit (v1.04) it spits out the following error:
Error preverifying class kxml2.io.KXmlParser
Class loading error: Wrong name
com.sun.kvem.ktools.ExecutionException: Preverifier returned 1
Build failed
I also tried the full package "kxml2.zip" but the same error occurs.
How can I get rid of this? Thanks in advance!Okay, finally worked it out (hopefully). I unpacked the archive to a directory (say "%J2MEWTK%\apps\KxmlTest\tmpclasses") and then preverified them "manually":
%J2SDK%\bin\preverify.exe -classpath "%J2MEWTK%\apps\KxmlTest\tmpclasses";"%J2MEWTK%\lib\midpapi.zip" org.kxml2.io.KXmlParser
%J2SDK%\bin\preverify.exe -classpath "%J2MEWTK%\apps\KxmlTest\tmpclasses";"%J2MEWTK%\lib\midpapi.zip" org.xmlpull.v1.XmlPullParser
%J2SDK%\bin\preverify.exe -classpath "%J2MEWTK%\apps\KxmlTest\tmpclasses";"%J2MEWTK%\lib\midpapi.zip" org.xmlpull.v1.XmlPullParserException
Then I packed them again to a jar-file:
%J2SDK%\bin\jar.exe -cvf kxml2-min.jar %J2MEWTK%\apps\KxmlTest\tmpclasses\output\.
That was all! -
Performance issues with class loader on Windows server
We are observing some performance issues in our application. We are Using weblogic 11g with Java6 on a windows 2003 server
The thread dumps indicate many threads are waiting in queue for the native file methods:
"[ACTIVE] ExecuteThread: '106' for queue: 'weblogic.kernel.Default (self-tuning)'" RUNNABLE
java.io.WinNTFileSystem.getBooleanAttributes(Native Method)
java.io.File.exists(Unknown Source)
weblogic.utils.classloaders.ClasspathClassFinder.getFileSource(ClasspathClassFinder.java:398)
weblogic.utils.classloaders.ClasspathClassFinder.getSourcesInternal(ClasspathClassFinder.java:347)
weblogic.utils.classloaders.ClasspathClassFinder.getSource(ClasspathClassFinder.java:316)
weblogic.application.io.ManifestFinder.getSource(ManifestFinder.java:75)
weblogic.utils.classloaders.MultiClassFinder.getSource(MultiClassFinder.java:67)
weblogic.application.utils.CompositeWebAppFinder.getSource(CompositeWebAppFinder.java:71)
weblogic.utils.classloaders.MultiClassFinder.getSource(MultiClassFinder.java:67)
weblogic.utils.classloaders.MultiClassFinder.getSource(MultiClassFinder.java:67)
weblogic.utils.classloaders.CodeGenClassFinder.getSource(CodeGenClassFinder.java:33)
weblogic.utils.classloaders.GenericClassLoader.findResource(GenericClassLoader.java:210)
weblogic.utils.classloaders.GenericClassLoader.getResourceInternal(GenericClassLoader.java:160)
weblogic.utils.classloaders.GenericClassLoader.getResource(GenericClassLoader.java:182)
java.lang.ClassLoader.getResourceAsStream(Unknown Source)
javax.xml.parsers.SecuritySupport$4.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
javax.xml.parsers.SecuritySupport.getResourceAsStream(Unknown Source)
javax.xml.parsers.FactoryFinder.findJarServiceProvider(Unknown Source)
javax.xml.parsers.FactoryFinder.find(Unknown Source)
javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
org.ajax4jsf.context.ResponseWriterContentHandler.<init>(ResponseWriterContentHandler.java:48)
org.ajax4jsf.context.ViewResources$HeadResponseWriter.<init>(ViewResources.java:259)
org.ajax4jsf.context.ViewResources.processHeadResources(ViewResources.java:445)
org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:193)
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
On googling this seems to be an issue with java file handling on windows servers and I couldn't find a solution yet. Any recommendation or pointer is appreciatedHi shubhu,
I just analyzed your partial Thread Dump data, the problem is that the ajax4jsf framework ResponseWriterContentHandler triggers internally a new instance of the DocumentBuilderFactory; every time; triggering heavy IO contention because of Class loader / JAR file search operations.
Too many of these IO operations under heavy load will create excessive contention and severe performance degradation; regardless of the OS you are running your JVM on.
Please review the link below and see if this is related to your problem.. This is a known issue in JBOSS JIRA when using RichFaces / ajaxJSF.
https://issues.jboss.org/browse/JBPAPP-6166
Regards,
P-H
http://javaeesupportpatterns.blogspot.com/ -
How can I make server use single class loader for several applications
I have several web/ejb applications. These applications use some common libraries and should share instances of classes from those libraries.
But applications are being deployed independently thus packaging all them to EAR is not acceptable.
I suppose the problem is that each application uses separate class loader.
How can I make AS use single class loader for a set of applications?
Different applications depend on different libraries so I need a way that will not share library for all applications on the domain but only for some exact applications.
When I placed common jar to *%domain%/lib* - all works. But that jar is shared between all applications on the domain.
When I tried to place common jar to *%domain%/lib/applibs* and specified --libraries* attribute on deploying I got exception
java.lang.ClassCastException: a.FirstDao cannot be cast to a.FirstDaoHere http://download.oracle.com/docs/cd/E19879-01/820-4336/6nfqd2b1t/index.html I read:
If multiple applications or modules refer to the same libraries, classes in those libraries are automatically shared.
This can reduce the memory footprint and allow sharing of static information.Does it mean that classes should be able to be casted ?You didn't specify which version of the application server you are using, but the config is similar as long as you know what to look for. Basically, you need to change the classloader delegation. Here's how it is done in 8.2
http://download.oracle.com/docs/cd/E19830-01/819-4721/beagb/index.html -
How can I get a dynamic list of Classes Loaded
I assume this may need to use some sort of reflection. Does
anyone have code or ideas where I can:
a) I can get a list of all Classes loaded and their
properties. This would probably be all instances of Class
b) A list of all
global instance variables. (This may not even be possible. I
know it can be done in other languages)
I assume this may need to use some sort of reflection.
Thank youAdobe Newsbot hopes that the following resources helps you.
NewsBot is experimental and any feedback (reply to this post) on
its utility will be appreciated:
mx.controls.List (Flex 3):
If the data is incorrect, you can call the preventDefault()
method to stop Flex from passing the new data back to the list
control and from closing the
Link:
http://livedocs.adobe.com/flex/3/langref/mx/controls/List.html
Displaying icons in a Flex List control at Flex Examples:
http://blog.flexexamples.com/2007/08/17/displaying-icons-in-a-flex-list-control/
--> <mx:Application xmlns:mx="
http://www.adobe.com/2006/mxml"
Link:
http://blog.flexexamples.com/2007/08/17/displaying-icons-in-a-flex-list-control/
Populate the list -- Flex 2.01:
You populate a list-based form control with the
<mx:dataProvider> child tag. The <mx:dataProvider> tag
lets you specify list items in several ways.
Link:
http://livedocs.adobe.com/flex/201/html/tutorial_controls_019_4.html
Smooth Scroll for Horizontal List - Flex India Community |
Google:
I have created image gallery with Horizontal List[Flex 2.0].
Just as below ref site. My Problem is i need a smooth scroll for
Horizontal List. where images
Link:
http://groups.google.com/group/flex_india/browse_thread/thread/a12441143b98d32c?hide_quote s=no
Creating a List control -- Flex 2.01:
The following example code adds a handler for a change event
to the List control. Flex broadcasts a mx.ListEvent.CHANGE event
when the value of the control
Link:
http://livedocs.adobe.com/flex/201/html/dpcontrols_062_03.html
Disclaimer: This response is generated automatically by the
Adobe NewsBot based on Adobe
Community
Engine. -
How to write a class loader to solve the class confliction in rt.jar?
Hello guys:
The weblogic.jar has the javax.management.*, it is conflict with rt.jar's
I want to use JMX 1.0 to communicate with weblogic 8.1. The client should be run in the Java 1.5
It throw
java.io.InvalidClassException: javax.management.ObjectName; local class incompatible:
stream classdesc serialVersionUID = -5467795090068647408, local class serialVersionUID = 1081892073854801359
java.io.InvalidClassException: javax.management.ObjectName; local class incompatible:
stream classdesc serialVersionUID = -5467795090068647408, local class serialVersionUID = 1081892073854801359I know the reason is java 1.5 has JMX 1.2 in it.
So how can I program a class loader to load the weblogic.jar classes in? I have tried a lot of code, but failed.
Is there any sample here?
I want to use the JMX 1.0 in weblogic.jar at jdk1.5 run time
Thanks a lot,
QiangHello guys:
The weblogic.jar has the javax.management.*, it is conflict with rt.jar's
I want to use JMX 1.0 to communicate with weblogic 8.1. The client should be run in the Java 1.5
It throw
java.io.InvalidClassException: javax.management.ObjectName; local class incompatible:
stream classdesc serialVersionUID = -5467795090068647408, local class serialVersionUID = 1081892073854801359
java.io.InvalidClassException: javax.management.ObjectName; local class incompatible:
stream classdesc serialVersionUID = -5467795090068647408, local class serialVersionUID = 1081892073854801359I know the reason is java 1.5 has JMX 1.2 in it.
So how can I program a class loader to load the weblogic.jar classes in? I have tried a lot of code, but failed.
Is there any sample here?
I want to use the JMX 1.0 in weblogic.jar at jdk1.5 run time
Thanks a lot,
Qiang -
Dinamyc class loading and jar files
I'm new to java. I would like to load some plugins in my application (it's going to be packaged as a jar at the end). I managed to find some dinamyc class loading examples but they search for the classes to load in a directory.
This is the code:
public static void main(String[] args) {
File pluginDirectory = new File("src/pluginsreloaded/plugins");
if (!pluginDirectory.exists()) { // the plugin directory does not exist
System.out.println("The plugins directory does not exist!");
return;
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".class");
String[] pluginFiles = pluginDirectory.list(filter);
for (int i = 0; i < pluginFiles.length; i++) {
if (pluginFiles.indexOf("$") == -1) {
System.out.println("Loading: " + pluginFiles[i].substring(0, pluginFiles[i].length() - 6));
IPlugin plugin = pm.loadPlugin(pluginFiles[i].substring(0, pluginFiles[i].length() - 6));
System.out.println(plugin.description());
protected static IPlugin loadPlugin(String name) {
// Query the plugin list for the plugin
PluginFactory _plugin = (PluginFactory) pluginList.get(name);
if (_plugin == null) { // the plugin is not loaded
try {
Class.forName("pluginsReloaded.plugins." + name);
// The plugin makes an entry in the plugin list
// when loaded
_plugin = (PluginFactory) pluginList.get(name);
if (_plugin == null) {
return null;
} catch (ClassNotFoundException e) {
System.out.println("Plugin " + name + " not found!");
return _plugin.create();
}IPlugin is an interface. I am using netbeans 5.0. The error I get is this:
Exception in thread "main" java.lang.NoClassDefFoundError: pluginsReloaded/plugins/plugin1 (wrong name: pluginsreloaded/plugins/plugin1)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at pluginsreloaded.PluginManager.loadPlugin(PluginManager.java:30)
at pluginsreloaded.Main.main(Main.java:44)
Java Result: 1As far as I can see it can't find the class. My question is how can I load the class/where can I find it?
Thanks.You can use the java.util.jar.JarFile class to enumerate the contents of a jar. It's not good practice to search for plugins in this way though. A plugin may well involve serveral classes, which don't all have to be internal. Furthermore its wise to avoid any comitment about the mechaism by which class files are to be fetched. You might want to do it remotely, some time, or load them from a database.
What seesms to be the standard approach is to put a list of plugin classes into the jar as a text file.
Plugins for a given purpose usually implement some specified interface, or extend some abstract class to which their objects can be cast once loaded (without this they aren't really much use).
Say your plugins implment org.myorg.WidgetFactory then you put a list of them, one fully qualified name to a line, in a file or jar entry called META-INF/services/org.myorg.WidgetFactory. You framework picks up all such files from the classpath using ClassLoader.getResources() and loads all the classes whose names if finds, hence you can add new sets of plugins just by adding a new jar or class directory to the class path. -
How to find out that sequence has finished loading?
Hello,
i have a custom C#-OPUI to load and execute testplans.
I do this using these funtions:
1. ApplicationManager.OpenSequencFile(filename)
2. ???
3.Command TestStart = axSequenceFileViewMgr.GetCommand(.......)
TestStart.Execute(true)
The question is now: How do i know that the OpenSequenceFile has finished doing everything?
I need to know that is finished before i run the execute-command.
Is there a specail final-event that i can check?
Thanks for help
Solved!
Go to Solution.Hi jigg,
Thanks for the info.
In my sequence file, besides the main sequence, I also enabled "SequenceFileLoad" callback. In "SequenceFileLoad" sequence, I added some instruments initialization tests. The goal is to initialize the instruments only once when the sequence file is loaded. Therefore I need to know when the "SequenceFileLoad" is finished or when the sequence file has finished loading.
My first idea is to use the event "axApplicationMgr_SequenceFileOpened", but I found that I will catch this event before the "SequenceFileLoad" execution finished.
And then, I also found that together with the execution of sequence "SequenceFileLoad", there are 2 events in my C# code: "axApplicationMgr_StartExecution" and "axApplicationMgr_EndExecution" triggered. So I was thinking may be I can use "axApplicationMgr_EndExecution" to determine if the sequence file has finished loading. But the problem is every sequence execution will trigger these 2 events. The main sequence will also trigger these 2 events. So I needs to know the name/ID of the current executing sequence.
So Is there a way to read current executing sequence name?
Thanks and regards,
0049 -
I am using Sun implementation of JAXB(jaxb-api.jar) for java-to-xml binding in my web application deployed in the latest version of oracle app server(10g release 3). The web server is loading Oracle implementation of JAXB from the shared archive xml.jar. To direct the web server to load application specific JAXB classes, I have used the property(<web-app-class-loader search-local-classes-first="true" include-war-manifest-class-path="false" />) in the deployment description - orion.xml file. But it does not solve the problem!
Thanks & regardsHi,
Refer to this link on OC4J's Classloading Framework... http://download-east.oracle.com/docs/cd/B25221_04/web.1013/b14433/classload.htm#sthref58 there are a couple of options you may be able to employ, including overriding the shared library - there is an example of doing this with the Oracle XML parser and Xerces.
I'm guessing you're on the right track, but you may want to try include-war-manifest-class-path="true". Also, are you sure that you've got your deployment descriptor file defined correctly? Its normally called orion-application.xml, and that particular element isn't defined in the documentation (http://download-east.oracle.com/docs/cd/B25221_04/web.1013/b14433/descriptors.htm#sthref337). You could always try configuring it through the administration console. -
Application Class Loader problem calling virtual function
Hello everyone
I have run in to very strange behavior of JVM
I have created a class loader which allows my to load classes from
jar file, regardless that URLClassLoader supplies this functionality.
I am using this class loader to load some classes and call their virtual functions. The class diagram looks like that:
public interface I {
public void init();
public class AAA implements
public void init(){
public class BBB extends AAA{
public void init(){
//here comes implementation
}Interface I and class AAA are loaded with System Class loader and Class BBB is loaded using my class loader from jar file.
ByteStreamClassLoader classLoader = new ByteStreamClassLoader ();
Class cl = classLoader. loadClass(�com.product.BBB�,true);
I myInterface = cl.newInstance();
myInterface.init();The problem is that from some unknown reason java class AAA.init() instead of BBB.init().
Can somebody help me what am I doing wrong?
Class Loader code attached below
public class ByteStreamClassLoader extends ClassLoader {
protected HashMap m_cache = new HashMap();
public void clearCashe() {
m_cache = new HashMap();
private String definePackage(String className) {
StringBuilder strB = new StringBuilder();
//Class name must be removed from the URI in order to define a package
String[] packageArray = className.split("\\.");
for (int i = 0; i < packageArray.length - 1; i++) {
strB.append(packageArray).append(".");
String packageName = strB.toString();
packageName = packageName.substring(0, packageName.length() - 1);
if (getPackage(packageName) == null) {
m_logger.log(Level.FINEST, "Defining package '" + packageName + "'");
definePackage(packageName, null, null, null, null, null, null, null);
return packageName;
public synchronized Class loadClass(String name, boolean resolve) throws
ClassNotFoundException {
name = name.replaceAll("/", ".").replaceAll(".class", "");
//Try to locate the Class in cashe
Class c = (Class) m_cache.get(name);
//Try to locate the Class in the System Class Loader
if (c == null) {
try {
c = ClassLoader.getSystemClassLoader().loadClass(name);
catch (Exception ex) {}
else {
m_logger.log(Level.FINEST, "Class '" + name + "' found in cache");
//Load the class from byte array
if (c == null) {
String resourceName = name;
if (!resourceName.endsWith(".class")) {
resourceName = resourceName.concat(".class");
//Retrieve class byte representation
if (resourceName.indexOf(".") != -1) {
resourceName =
resourceName.replaceAll("\\.", "/").replaceAll("/class", ".class");
//Use the ByteStreamClassLoader to load the class from byte array
byte[] classByteArray = null;
try {
classByteArray = getResourceBytes(resourceName);
catch (IOException ex1) {
throw new ClassNotFoundException(
"Could not load class data." + ex1.getMessage());
m_logger.log(
Level.FINEST, "Loading class '" +
name + "' Byte Length: " + classByteArray.length);
String p = definePackage(name);
c = defineClass(
name,
classByteArray,
0,
classByteArray.length,
ByteStreamClassLoader.class.getProtectionDomain());
m_cache.put(name, c);
if (resolve) {
resolveClass(c);
return c;Hello everyone
I have run in to very strange behavior of JVM
I have created a class loader which allows my to load classes from
jar file, regardless that URLClassLoader supplies this functionality.
I am using this class loader to load some classes and call their virtual functions. The class diagram looks like that:
public interface I {
public void init();
public class AAA implements
public void init(){
public class BBB extends AAA{
public void init(){
//here comes implementation
}Interface I and class AAA are loaded with System Class loader and Class BBB is loaded using my class loader from jar file.
ByteStreamClassLoader classLoader = new ByteStreamClassLoader ();
Class cl = classLoader. loadClass(�com.product.BBB�,true);
I myInterface = cl.newInstance();
myInterface.init();The problem is that from some unknown reason java class AAA.init() instead of BBB.init().
Can somebody help me what am I doing wrong?
Class Loader code attached below
public class ByteStreamClassLoader extends ClassLoader {
protected HashMap m_cache = new HashMap();
public void clearCashe() {
m_cache = new HashMap();
private String definePackage(String className) {
StringBuilder strB = new StringBuilder();
//Class name must be removed from the URI in order to define a package
String[] packageArray = className.split("\\.");
for (int i = 0; i < packageArray.length - 1; i++) {
strB.append(packageArray).append(".");
String packageName = strB.toString();
packageName = packageName.substring(0, packageName.length() - 1);
if (getPackage(packageName) == null) {
m_logger.log(Level.FINEST, "Defining package '" + packageName + "'");
definePackage(packageName, null, null, null, null, null, null, null);
return packageName;
public synchronized Class loadClass(String name, boolean resolve) throws
ClassNotFoundException {
name = name.replaceAll("/", ".").replaceAll(".class", "");
//Try to locate the Class in cashe
Class c = (Class) m_cache.get(name);
//Try to locate the Class in the System Class Loader
if (c == null) {
try {
c = ClassLoader.getSystemClassLoader().loadClass(name);
catch (Exception ex) {}
else {
m_logger.log(Level.FINEST, "Class '" + name + "' found in cache");
//Load the class from byte array
if (c == null) {
String resourceName = name;
if (!resourceName.endsWith(".class")) {
resourceName = resourceName.concat(".class");
//Retrieve class byte representation
if (resourceName.indexOf(".") != -1) {
resourceName =
resourceName.replaceAll("\\.", "/").replaceAll("/class", ".class");
//Use the ByteStreamClassLoader to load the class from byte array
byte[] classByteArray = null;
try {
classByteArray = getResourceBytes(resourceName);
catch (IOException ex1) {
throw new ClassNotFoundException(
"Could not load class data." + ex1.getMessage());
m_logger.log(
Level.FINEST, "Loading class '" +
name + "' Byte Length: " + classByteArray.length);
String p = definePackage(name);
c = defineClass(
name,
classByteArray,
0,
classByteArray.length,
ByteStreamClassLoader.class.getProtectionDomain());
m_cache.put(name, c);
if (resolve) {
resolveClass(c);
return c; -
Plz help me out with class loader problem
hai forum members,
I have a code which loads class files from local disk.
It works fine with some classes ,
But i get this exception when i am selecting certain other class files
I am using jdeveloper.
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: Filter (wrong name: project1/Filter)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at com.jutframe.JavaUnitTester.selectClass_actionPerformed(JavaUnitTester.java:449)
at com.jutframe.JavaUnitTester$7.actionPerformed(JavaUnitTester.java:338)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.AbstractButton.doClick(AbstractButton.java:302)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1000)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1041)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
JFileChooser jfilechooser=new JFileChooser();
Filterclass filter=new Filterclass();
//Set selection mode for file chooser
jfilechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
//set file filter
jfilechooser.setFileFilter(filter);
int returnVal = jfilechooser.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION)
try
String str = jfilechooser.getSelectedFile().getName();
String parent=jfilechooser.getSelectedFile().getParent();
// Create a File object on the root of the directory containing the class file
File file = new File(parent);
// Convert File to a URL
URL url = file.toURL();
URL[] urls = new URL[]{url};
// Create a new class loader with the directory
ClassLoader cl = new URLClassLoader(urls);
StringTokenizer st = new StringTokenizer(str,".");
String s = st.nextToken ();
Class c = cl.loadClass(s); //ERROR IS SHOWN IN THIS PARTICULAR LINE
Object instance=c.newInstance();
--------------------------------------------please help me trace my mistake.
thank you all.i think the problem that i have set a particular class path for my class files and my application loads files from that alone.
So plz tell me if theres any way to access the class path of a particular file dynamically?
regards
Maybe you are looking for
-
Script Label insert into FileName
Any help would be greatly appreciated! This is a portion of "PageExporterUtility5.0.js" that I'm tailoring to use at our workplace. Finding a simple description of how to use the "Script Label" is stumping me. How would you modify the following to wo
-
How does anyone get a point over to Adobe? Not everyone needs or wants a bewildering range of product permutations. I bought the product to do just what it should - convert PDF to word. It worked once, I had the 'Welcome' email, and from then on, it'
-
Java application launching an other using Runtime.exec()
I have a Gui java appication that starts an other Gui java application by this way: Runtime.getRuntime().exec("java -classpath ....") At first a MSDOS window appears. Then the new Gui window is display only if i change the size of the first Gui wiind
-
Need info related to creating indexes on ODS.
Hi All, I have transported manually created secondary indexes on my ODS to quality system. Now I have a requirement where i have to optimise the query performance. In quality, I activated the ODS.There was data in the ODS before creating of index. Bu
-
Lost info in last iPhone iOS update
I have an iPhone 5S. After that latest iPhone update I lost my audiobooks and notes. How do Get these back or can I? Any help is appreciated. lizliz