【问题标题】:Windows GetClassName function returns the fully qualified class name of a JFrameWindows GetClassName 函数返回 JFrame 的完全限定类名
【发布时间】:2013-11-27 00:09:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: java windows java-web-start jnlp


    【解决方案1】:

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

    谢谢。 -促销

    【讨论】:

      【解决方案2】:

      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;
        }  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-12
        • 1970-01-01
        • 2015-01-08
        • 1970-01-01
        • 2011-11-08
        • 1970-01-01
        • 2021-03-25
        • 1970-01-01
        相关资源
        最近更新 更多