It's SUMMER! If you like what you hear, DEFINITIVELY, treat me a beer ! :) (It's the Java pub house after all :) https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z8V2ZWV93UMW4
Nimbus code to get the dang CacheMode (considered a private variable)
public class ButtonPainter extends AbstractRegionPainter {
public ButtonPainter() {
Class<?> c = null;
PaintContext ctx = new PaintContext(new Insets(0,0,0,0), new Dimension(100,100), false, null, Double.POSITIVE_INFINITY, 2.0 );
try {
c = Class.forName("javax.swing.plaf.nimbus.AbstractRegionPainter$PaintContext$CacheMode");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (c != null) {
Object cacheMode = c.getEnumConstants()[2]; // NINE_SQUARE_SCALE
for (Field field : ctx.getClass().getDeclaredFields()) {
if (c.getName().equals(field.getType().getName())) { // if Field is the CacheMode
try {
// the following lines would not be necessary for example if
// AbstractRegionPainter.cacheMode were protected or public.
field.setAccessible(true); // make it accessible so that we can set it
field.set(ctx, cacheMode); // set the cachemode
// this is equivalent as sayin "ctx.cacheMode = CacheMode.NINE_SQUARE_SCALE" if it were public/protected
break;
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
}
@Override
protected PaintContext getPaintContext() {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
protected void doPaint(Graphics2D g, JComponent c, int width, int height, Object[] extendedCacheKeys) {
//To change body of implemented methods use File | Settings | File Templates.
}
}
Code to get instance from a source file
public static Object getInstanceForSource(String className, String sourceForRule) {
String filename = "tmp/" + className + ".java";
File file = new File(filename);
writeFile(filename, sourceForRule);
String classPath = System.getProperty("java.class.path");
String[] args = new String[]{
"-classpath", classPath,
filename
};
StringWriter compilerOutput = new StringWriter();
int status = com.sun.tools.javac.Main.compile(args,new PrintWriter(compilerOutput));
additionalInfo.value = compilerOutput.toString();
switch (status) {
case 0: // OK
// Make the class file temporary as well
File classFile = new File("./tmp/");
try {
// Try to access the class and run its main method
URLClassLoader loader = new URLClassLoader(new URL[] {classFile.toURI().toURL()});
Class clazz = loader.loadClass(className);
return clazz.newInstance();
} catch (Exception ex) {
additionalInfo.value = "Exception in main: " + Utilities.exceptionToString(ex)+"\n"+additionalInfo.value;
}
break;
case 1:
System.out.println ("Status: Error" +"\n"+additionalInfo.value);
break;
case 2:
System.out.println ("Status: CMDERR" +"\n"+additionalInfo.value);
break;
case 3:
System.out.println ("Status: SYSERR" +"\n"+additionalInfo.value);
break;
case 4:
System.out.println ("Status: ABNORMAL" +"\n"+additionalInfo.value);
break;
default:
System.out.println ("Status: UNKNOWN" +"\n"+additionalInfo.value);
break;
}
return null;
}
public static void writeFile(String fileName, String content) {
Writer writer;
File file = new File(fileName);
try {
writer = new BufferedWriter(new FileWriter(file));
writer.write(content);
writer.close();
} catch (IOException e) {
System.out.println ("I/O exception "+e);
}
}
Tweet, Tweet! (https://twitter.com/#!/fguime)
Reflection 'trail' http://docs.oracle.com/javase/tutorial/reflect/index.html
Create dynamic applications with javax.tools http://www.ibm.com/developerworks/java/library/j-jcomp/index.html
URLClassLoaders (loads .class files generated http://docs.oracle.com/javase/6/docs/api/java/net/URLClassLoader.html
Vote for us in iTunes (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Questions, feedback or comments! comments@javapubhouse.com
Subscribe to our podcast! (http://javapubhouse.libsyn.com/rss)
ITunes link (http://itunes.apple.com/us/podcast/java-pub-house/id467641329)
Java 7 Recipes book! (http://www.amazon.com/gp/product/1430240563/ref=as_li_ss_il?ie=UTF8&tag=meq-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1430240563)
Hey! if you like what you hear, treat me a beer! (It's the Java pub house after all :) https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Z8V2ZWV93UMW4
No comments:
Post a Comment