我有一个Java应用程序,其主窗口是JFrame子类。
附加了一个为此窗口调用GetClassName的探查器,它返回完全限定的类,即com.package.subpackage.MyClass,而不是SunAwtFrame。
我以前从未见过这样的类名返回 - Java WebStart正在启动Java应用程序 - 可能有一个jnlp选项吗? 以前有人见过这个吗?
答案 0 :(得分:0)
您使用的是哪种JRE?如果您使用的是> 1.4,那么它将始终返回SunAwtFrame。这符合: https://www.java.net//node/659065
感谢。 -Promod
答案 1 :(得分:0)
Java MSWindow类名的历史记录
Java 1.1.7“AwtFrame”更改为带前缀的“SunAwtFrame”https://bugs.openjdk.java.net/browse/JDK-4131094
Java 1.4.0投诉后awt_frame :: getClassName()更改为返回完全限定的java类名https://bugs.openjdk.java.net/browse/JDK-4284277
Java 1.4.0投诉改回拒绝https://bugs.openjdk.java.net/browse/JDK-4486836
Java 1.6.0由更改引起的一个严重错误说服开发人员恢复静态名称“SunAwtFrame”https://bugs.openjdk.java.net/browse/JDK-4846680
错误是什么: 创建一个名为编辑或编辑并扩展JFrame并显示框架的类,应用程序在左上角显示一个闪烁的光标。使用鼠标选择光标位置,setTitle中使用的文本显示在白色背景上。
The messy code in java 4 and 5:
LPCTSTR AwtFrame::GetClassName() {
!
! if (m_windowClassName == NULL)
! {
! JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
! if (env->EnsureLocalCapacity(2) < 0) {
! m_windowClassName = new TCHAR[_tcslen(AWT_FRAME_WINDOW_CLASS_NAME) + 1];
! _tcscpy(m_windowClassName,AWT_FRAME_WINDOW_CLASS_NAME);
! }
! else
! {
! jobject frame = GetTarget(env);
! jclass frameClass = env->GetObjectClass(frame);
!
! JavaStringBuffer jsb = JavaStringBuffer(env,JVM_GetClassName(env,frameClass));
!
! m_windowClassName = new TCHAR[_tcslen(jsb) + 1];
! _tcscpy(m_windowClassName,jsb);
!
! env->DeleteLocalRef(frameClass);
! env->DeleteLocalRef(frame);
!
! }
! }
! return m_windowClassName;
}
The current code since java 6:
LPCTSTR AwtFrame::GetClassName() {
! return AWT_FRAME_WINDOW_CLASS_NAME;
}