簡體   English   中英

Windows GetClassName函數返回JFrame的完全限定的類名

[英]Windows GetClassName function returns the fully qualified class name of a JFrame

我有一個Java應用程序,其主窗口是JFrame子類。

有一個附加的探查器,該探查器為此窗口調用GetClassName ,它返回完全限定的類,即com.package.subpackage.MyClass,而不是SunAwtFrame。

我以前從未見過返回過這樣的類名-Java WebStart正在啟動Java應用程序-也許有一個jnlp選項嗎? 有人遇到過嗎?

您正在使用哪個JRE? 如果使用的是> 1.4,則它將始終返回SunAwtFrame。 這符合: https : //www.java.net//node/659065

謝謝。 -Promod

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或編輯並擴展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;
  }  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM