2

我有一个 Java 应用程序,其主窗口是 JFrame 子类。

附加的分析器为此窗口调用GetClassName ,它返回完全限定的类,即com.package.subpackage.MyClass,而不是SunAwtFrame。

我以前从未见过像这样返回的类名 - Java WebStart 正在启动 Java 应用程序 - 也许有一个 jnlp 选项?以前有人遇到过这种情况吗?

4

2 回答 2

0

您使用的是哪个 JRE?如果您使用 >1.4,那么它将始终返回 SunAwtFrame。这是根据: https ://www.java.net//node/659065

谢谢。-促销

于 2013-12-06T09:47:51.943 回答
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

错误是什么:创建一个名为 Edit 或 edit 并扩展 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;
  }  
于 2018-03-23T15:08:58.860 回答