2012-04-05 12 views
5
private void launchEventPanel(String title) { 
    EventQueue.invokeLater(new Runnable(title) { 
     public void run() { 
      JFrame myFrame = new JFrame(); 
      myFrame.setTitle(this.val$title); 
      myFrame.setIconImage(CrConference.this.mainCore.myPanel.myIconManager.getPromptIcon(Mart.class.toString())); 
      myFrame.getContentPane().add(Conference.this.myEventPanel, "Center"); 
      myFrame.pack(); 
      myFrame.setVisible(true); 
     } 
    }); 
} 

tengo un código que intento compilar y comprender. ayuda muy apreciada

+0

http://stackoverflow.com/questions/65475/valid-characters-in-a-java-class-name, http://stackoverflow.com/questions/5845299/why-is-it-bad-to-start-a-variable-name-with-a -dollar-sign-in-c-java-and-simila, http://stackoverflow.com/questions/1987603/is-there-a-convention-when-using-java-rmi-to-use-the-dollar -sign-in-a-variab –

+2

¿Este código está descompilado? Esperaría nombres de variables como ese en código descompilado. – Jesper

+0

He editado el título para que refleje el "código impar", 'val $ title', un identificador Java perfectamente válido, tan válido como' foobar', pero la 'regla' es no usarlo (excepto herramientas que generar código automáticamente). –

Respuesta

3

Esta línea:

myFrame.setTitle(this.val$title); 

es simplemente poniendo el título de un objeto JFrame, utilizando el valor del atributo val$title para hacerlo. val$title es un atributo de instancia de la clase actual, su nombre es un poco inusual (debido a $) pero, no obstante, es válido para un identificador en Java.

+0

Podría ser una variable local :) –

+0

@ Eng.Fouad no se declaran variables locales con ese nombre en el código en la pregunta –

+0

oh, tienes razón. No me di cuenta de eso. –

2

línea 5 es simplemente establecer el título del marco (el texto que ve en la parte superior del marco de la ventana en windows) "this.val $ title" es solo un memeber local llamado val $ title que quien sea escribió el código almacenado en la cadena del título.

Si bien es poco común ver la mayoría de los lenguajes basados ​​en C tratar $ como un carácter alfapetico, como az o AZ.

+0

Idiomas * sin fundamento * basados ​​en C, o que usan sintaxis C * *, tal vez. C no lo hace, ni lo hace C++ AFAIK. JS y Java son los únicos C-alikes que se me ocurren, realmente. – cHao

4

Como se describe here y here, el argumento de la Runnable Constuctor y "$ this.val" al nombre del campo se añade por el compilador y se muestra en el código de bytes generada. Por lo tanto, estas cosas adicionales se reflejan en el código descompilado.

para obtener el código descompilada original, añade final a la declaración de titletitle y retire de la llamada a Runnable y la this.val$ desde el frente de title:

private void launchEventPanel(final String title) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      JFrame myFrame = new JFrame(); 
      myFrame.setTitle(title); 
      myFrame.setIconImage(CrConference.this.mainCore.myPanel.myIconManager.getPromptIcon(Mart.class.toString())); 
      myFrame.getContentPane().add(Conference.this.myEventPanel, "Center"); 
      myFrame.pack(); 
      myFrame.setVisible(true); 
     } 
    }); 
} 
Cuestiones relacionadas