Prev: in the Observer (Publish/Subscribe) pattern, are notificationsalien method calls?
Next: Using 'final' with local variables
From: Ross on 5 Oct 2009 07:50 On Oct 5, 11:41 am, Toffstier <mjcap...(a)gmail.com> wrote: > public static String getMainClassName() > { > for(final Map.Entry<String, String> entry : System.getenv().entrySet > ()) > { > if(entry.getKey().startsWith("JAVA_MAIN_CLASS")) > return entry.getValue(); > } > throw new IllegalStateException("Cannot determine main class."); > } Thanks, but this doesn't work for me. Even trying to create the parent class leads to an error being thrown. $ java TestMain Exception in thread "main" java.lang.IllegalStateException: Cannot determine main class. at TestMain.getMainClassName(TestMain.java:14) at TestMain.main(TestMain.java:19) $ Here are the keys available on my computer. entry key is TERM entry key is SSH_AGENT_PID entry key is JAVA_HOME entry key is SHLVL entry key is JMFHOME entry key is XFILESEARCHPATH entry key is GDM_XSERVER_LOCATION entry key is SESSION_MANAGER entry key is COLORTERM entry key is GNOME_DESKTOP_SESSION_ID entry key is MAIL entry key is GDMSESSION entry key is HOSTNAME entry key is PWD entry key is FIREFOX_DSP entry key is WINDOWID entry key is KDEDIR entry key is LOGNAME entry key is G_BROKEN_FILENAMES entry key is QTDIR entry key is _ entry key is SSH_AUTH_SOCK entry key is NLSPATH entry key is GNOME_KEYRING_SOCKET entry key is LD_LIBRARY_PATH entry key is OLDPWD entry key is SHELL entry key is INPUTRC entry key is DBUS_SESSION_BUS_ADDRESS entry key is HISTSIZE entry key is GTK_RC_FILES entry key is CLASSPATH entry key is PATH entry key is JRE_HOME entry key is DESKTOP_SESSION entry key is DISPLAY entry key is USER entry key is DESKTOP_STARTUP_ID entry key is HOME entry key is PKG_CONFIG_PATH entry key is LESSOPEN entry key is XAUTHORITY entry key is HTC_XML entry key is LS_COLORS entry key is LANG entry key is SSH_ASKPASS Here's the source code I used. import java.util.*; public class TestMain { public static String getMainClassName() { for(final Map.Entry<String, String> entry : System.getenv ().entrySet ()) { System.out.println( "entry key is " + entry.getKey() ); if(entry.getKey().startsWith("JAVA_MAIN_CLASS")) return entry.getValue(); } throw new IllegalStateException("Cannot determine main class."); } public static void main( String args[] ) { System.out.println( "main class is " + getMainClassName() ); } }
From: Mike Schilling on 5 Oct 2009 11:45
Toffstier wrote: > On 15 Sep., 03:32, "Mike Schilling" <mscottschill...(a)hotmail.com> > wrote: >> Arne Vajh�j wrote: >>>>> If we can assume that Java version >= 1.5, main thread has >>>>> thread id 1 and max. stack depth is 1000: >> >>>>> StackTraceElement[] ste = >>>>> ManagementFactory.getThreadMXBean().getThreadInfo(1, >>>>> 1000).getStackTrace(); String clznam = >>>>> ste[ste.length-1].getClassName(); >> >>>> Is that really going to give you the class mentioned in the >>>> command >>>> line rather than the class which defines the static main() >>>> method? >> >>> You are correct. It returns the parent class where main is >>> defined. >> >> Right. My strong impression is that trying to figure out which >> subclass was mentioned in the command line is simply hopeless (or >> at >> best extremely non-portable) and that, accordingly, the OP should >> figure out some other way of doing things. Fortunately, there are >> dozens of them. > > public static String getMainClassName() > { > for(final Map.Entry<String, String> entry : > System.getenv().entrySet ()) > { > if(entry.getKey().startsWith("JAVA_MAIN_CLASS")) > return entry.getValue(); > } > throw new IllegalStateException("Cannot determine main class."); > } How is JAVA_MAIN_CLASS getting set? It's not something the JVM does automagically. |