if, else, etc. als Membervariablen?

Status
Nicht offen für weitere Antworten.

MathiasBauer

Bekanntes Mitglied
Hallo,

ich binde eine Jar in mein Projekt ein, die eine Klasse beinhaltet, die private Deklarartionen von if, else, etc. beinhaltet. Wie ist denn sowas möglich??? If, else, etc. ist doch vordefiniert und kann nicht als Variablennamen benutzt werden???

Als Swing-Applikation läuft es dann auch noch!!!!
Mein Problem bei der ganzen Sache ist, wenn ich die Swing-Applikation in ein Webframework einbaue, dann will er auch auf die if, else, etc. der Klasse zugreifen anstatt die richtigen if, else, etc. von Java zu benutzen. Kann ich da irgendwas vor die if, else, etc. schreiben, damit er weiß, dass er den Standard zu benutzen hat?

Vielen Dank im Voraus!
 

MathiasBauer

Bekanntes Mitglied
Ich kann mir die Klasse nicht richtig anschauen, da sie als externe Klasse eingebunden ist. Mit dem JadDecompiler für Eclipse bekomme ich aber folgenden Codeausschnitt angezeigt:

Code:
//  (version 1.2 : 46.0, super bit)
public class diamondedge.vb.VbGraphics {
  
  // Field descriptor #89 I
  private int goto;
  
  // Field descriptor #89 I
  private int else;
  
  // Field descriptor #92 Ljava/awt/Color;
  private java.awt.Color for;
  
  // Field descriptor #94 S
  private short int;
  
  // Field descriptor #96 B
  private byte case;
  
  // Field descriptor #94 S
  private short null;
  
  // Field descriptor #99 D
  private double d;
  
  // Field descriptor #99 D
  private double byte;
  
  // Field descriptor #99 D
  private double c;
  
  // Field descriptor #99 D
  private double if;

Hintergrund:

Ich kann mit dem Konverter Java Edition von Diamond Edge aus Microsoft Access heraus Java Swing Klassen generieren lassen. Dann habe ich die Microsoft Access Anwendung als Swing Desktop Anwendung. Für diese Anwendung müssen aber auch die externen Klassen eingebunden werden. Wenn ich jetzt die Anwednung als Webanwendung laufen lasse möchte, sagt der Tomcat Server mir, dass er auf die Membervariablen (if, else, etc.) der externen Klasse zugreift. Damit kann das Framework Swingweb aber leider nichts anfangen...
 
M

maki

Gast
Kenne weder den Konverter noch andere, denke aber dass es an ihm liegt ;)
Nebenbei gefragt, wie wartbar sind denn solche autom. konvertierten Lösungen eigentlich?
 

MathiasBauer

Bekanntes Mitglied
Also die Klassen sehen sehr sauber aus, d.h. der Code ist wartbar.

Aber zurück zum Problem:

Wie kann es möglich sein ein if zu überschreiben? Kann ich irgendwie wieder auf das Java if zurückgreifen, in dem ich im Code etwas voranstelle (z.B. javax.swing.if -> geht so natürlich nicht!)?
 

MathiasBauer

Bekanntes Mitglied
Hier die Klasse, die mir Probleme bereitet:

Code:
import diamondedge.util.*;
import diamondedge.ado.*;
import diamondedge.vb.*;
import java.awt.*;
import javax.swing.*;
import diamondedge.swing.*;
import javax.swing.event.*;
import java.awt.event.*;

/**
 *  Use database order for string comparisons.
 *  Requires variables to be declared before they are used.
 */
public class Main_Switchboard extends JForm
             implements ActionListener
{
	
	
  public CommandButton Suppliers = new CommandButton();
  public CommandButton Orders = new CommandButton();
  public CommandButton DisplayDatabaseWindow = new CommandButton();
  public CommandButton Categories = new CommandButton();
  public VbLabel Label8 = new VbLabel();
  public CommandButton Products = new CommandButton();
  public VbImage Logo = new VbImage();
  public diamondedge.vb.Shape Box14 = new diamondedge.vb.Shape();
  public diamondedge.vb.Shape Box7 = new diamondedge.vb.Shape();
  public CommandButton ExitMicrosoftAccess = new CommandButton();
  public CommandButton Sales_Reports_Dialog = new CommandButton();

  public Main_Switchboard()
  {
  }

  public void initialize()
  {
    if( initialized )
      return;
    try
    {
      setLayout( null );
      setName( "Main_Switchboard" );
      setTitle( "Main Switchboard" );
   //   unsup HelpContextID = 430;
      setFocusTraversalPolicy( TAB_ORDER_FOCUS_TRAVERSAL_POLICY );
      setFormLocation( 65, 84 );
      setSize( 413, 242 );
      setFormSize( 413, 242 );

      ExitMicrosoftAccess.setName( "ExitMicrosoftAccess" );
      add( ExitMicrosoftAccess );
      ExitMicrosoftAccess.setVisible( true );
      ExitMicrosoftAccess.setEnabled( true );
      ExitMicrosoftAccess.setRequestFocusEnabled( true );
      ExitMicrosoftAccess.setTabOrder( 6 );
      //unsup ExitMicrosoftAccess.FontUnderline = false;
      ExitMicrosoftAccess.setToolTipText( "Close the Northwind database and exit Microsoft Access." );
      //unsup ExitMicrosoftAccess.HelpContextID = 0;
      ExitMicrosoftAccess.setText( "E&xit Microsoft Access" );
      ExitMicrosoftAccess.setDefaultButton( false );
      //unsup ExitMicrosoftAccess.Cancel = false;
      ExitMicrosoftAccess.setLocation( 38, 192 );
      ExitMicrosoftAccess.setSize( 143, 29 );
      ExitMicrosoftAccess.setFont( new Font("SansSerif", Font.PLAIN, 10) );

      DisplayDatabaseWindow.setName( "DisplayDatabaseWindow" );
      add( DisplayDatabaseWindow );
      DisplayDatabaseWindow.setVisible( true );
      DisplayDatabaseWindow.setEnabled( true );
      DisplayDatabaseWindow.setRequestFocusEnabled( true );
      DisplayDatabaseWindow.setTabOrder( 5 );
      //unsup DisplayDatabaseWindow.FontUnderline = false;
      DisplayDatabaseWindow.setToolTipText( "Close this switchboard and display the Database window." );
      //unsup DisplayDatabaseWindow.HelpContextID = 0;
      DisplayDatabaseWindow.setText( "&Display Database Window" );
      DisplayDatabaseWindow.setDefaultButton( true );
      //unsup DisplayDatabaseWindow.Cancel = false;
      DisplayDatabaseWindow.setLocation( 226, 192 );
      DisplayDatabaseWindow.setSize( 143, 29 );
      DisplayDatabaseWindow.setFont( new Font("SansSerif", Font.PLAIN, 10) );

      Sales_Reports_Dialog.setName( "Sales_Reports_Dialog" );
      add( Sales_Reports_Dialog );
      Sales_Reports_Dialog.setVisible( true );
      Sales_Reports_Dialog.setEnabled( true );
      Sales_Reports_Dialog.setRequestFocusEnabled( true );
      Sales_Reports_Dialog.setTabOrder( 4 );
      //unsup Sales_Reports_Dialog.FontUnderline = false;
      Sales_Reports_Dialog.setToolTipText( "Open the Print Sales Reports dialog box and select a report to print." );
      //unsup Sales_Reports_Dialog.HelpContextID = 0;
      Sales_Reports_Dialog.setText( "Print Sales &Reports" );
      Sales_Reports_Dialog.setDefaultButton( false );
      //unsup Sales_Reports_Dialog.Cancel = false;
      Sales_Reports_Dialog.setLocation( 226, 147 );
      Sales_Reports_Dialog.setSize( 143, 29 );
      Sales_Reports_Dialog.setFont( new Font("SansSerif", Font.PLAIN, 10) );

      Categories.setName( "Categories" );
      add( Categories );
      Categories.setVisible( true );
      Categories.setEnabled( true );
      Categories.setRequestFocusEnabled( true );
      Categories.setTabOrder( 0 );
      //unsup Categories.FontUnderline = false;
      Categories.setToolTipText( "Open the Categories form." );
      //unsup Categories.HelpContextID = 0;
      Categories.setText( "&Categories" );
      Categories.setDefaultButton( false );
      //unsup Categories.Cancel = false;
      Categories.setLocation( 222, 48 );
      Categories.setSize( 68, 29 );
      Categories.setFont( new Font("SansSerif", Font.PLAIN, 10) );

      Products.setName( "Products" );
      add( Products );
      Products.setVisible( true );
      Products.setEnabled( true );
      Products.setRequestFocusEnabled( true );
      Products.setTabOrder( 1 );
      //unsup Products.FontUnderline = false;
      Products.setToolTipText( "Open the Products form." );
      //unsup Products.HelpContextID = 0;
      Products.setText( "&Products" );
      Products.setDefaultButton( false );
      //unsup Products.Cancel = false;
      Products.setLocation( 222, 89 );
      Products.setSize( 68, 29 );
      Products.setFont( new Font("SansSerif", Font.PLAIN, 10) );

      Suppliers.setName( "Suppliers" );
      add( Suppliers );
      Suppliers.setVisible( true );
      Suppliers.setEnabled( true );
      Suppliers.setRequestFocusEnabled( true );
      Suppliers.setTabOrder( 2 );
      //unsup Suppliers.FontUnderline = false;
      Suppliers.setToolTipText( "Open the Suppliers form." );
      //unsup Suppliers.HelpContextID = 0;
      Suppliers.setText( "&Suppliers" );
      Suppliers.setDefaultButton( false );
      //unsup Suppliers.Cancel = false;
      Suppliers.setLocation( 308, 48 );
      Suppliers.setSize( 68, 29 );
      Suppliers.setFont( new Font("SansSerif", Font.PLAIN, 10) );

      Orders.setName( "Orders" );
      add( Orders );
      Orders.setVisible( true );
      Orders.setEnabled( true );
      Orders.setRequestFocusEnabled( true );
      Orders.setTabOrder( 3 );
      //unsup Orders.FontUnderline = false;
      Orders.setToolTipText( "Open the Orders form." );
      //unsup Orders.HelpContextID = 0;
      Orders.setText( "&Orders" );
      Orders.setDefaultButton( false );
      //unsup Orders.Cancel = false;
      Orders.setLocation( 308, 89 );
      Orders.setSize( 68, 29 );
      Orders.setFont( new Font("SansSerif", Font.PLAIN, 10) );

      Box7.setName( "Box7" );
      add( Box7 );
      Box7.setVisible( true );
      Box7.setBackStyle( 0 );
      Box7.setBordered( true );
      Box7.setBorderColor( Color.black );
      Box7.setBorderWidth( 1 );
      Box7.setBordered( true );
      Box7.setLocation( 211, 32 );
      Box7.setSize( 173, 98 );

      Label8.setName( "Label8" );
      add( Label8 );
      Label8.setVisible( true );
      //unsup Label8.FontUnderline = false;
      Label8.setText( "View Product and Order Information:" );
      Label8.setForeground( SystemColor.controlText );
      Label8.setOutline3D( false );
      Label8.setOutlined( false );
      Label8.setOpaque( false );
      Label8.setHorizontalAlignment( SwingConstants.LEFT );
      //unsup Label8.WordWrap = true;
      Label8.setLocation( 211, 16 );
      Label8.setSize( 176, 14 );
      Label8.setFont( new Font("SansSerif", Font.PLAIN, 10) );

      Logo.setName( "Logo" );
      add( Logo );
      Logo.setVisible( true );
      Logo.setImage( Screen.loadImage(this, "resources/Main_Switchboard_Logo_Picture.jpg") );
      //unsup Logo.Appearance = 0;
      Logo.setOutlined( false );
      Logo.setLocation( 34, 22 );
      Logo.setSize( 157, 151 );

      Box14.setName( "Box14" );
      add( Box14 );
      Box14.setVisible( true );
      Box14.setBackStyle( 0 );
      Box14.setBordered( true );
      Box14.setBorderColor( Color.black );
      Box14.setBorderWidth( 1 );
      Box14.setBordered( true );
      Box14.setLocation( 32, 22 );
      Box14.setSize( 157, 151 );
    }
    catch(Exception _e_) { Err.set(_e_,"Main_Switchboard"); }

    if( !unloaded )
      enableEvents();
    super.initialize();
    initializeForm(1);
  }

  // methods

  public int OpenForms( String strFormName )
  {
    int OpenForms = 0;
    // This function is used in the Click event of command buttons that
    // open forms on the Main Switchboard. Using a function is more efficient
    // than repeating the same code in multiple event procedures.
    try 
    {

      // Open specified form.
      AC_Util.GetForm( strFormName ).showForm();

      Exit_OpenForms: 
      return OpenForms;

    }
    catch( Exception _e_ )
    {
      Err.set( _e_ );
      try 
      {
        JOptionPane.showMessageDialog( Screen.getActiveControl(), Err.getError().getDescription() );
        //unsup Resume Exit_OpenForms
        Err.clear();
      }
      catch( Exception _e2_ )
      {
      }
    }
    return OpenForms;
  }

  // events

  private void Suppliers_Click()
  {
    try
    {
      OpenForms( "Suppliers" );
    }
    catch(Exception _e_) { Err.set(_e_,"Suppliers_Click"); }
  }

  private void Orders_Click()
  {
    try
    {
      OpenForms( "Orders" );
    }
    catch(Exception _e_) { Err.set(_e_,"Orders_Click"); }
  }

  public void DisplayDatabaseWindow_Click()
  {
    String strDocName = "";
    // This code created in part by Command Button Wizard.
    try 
    {


      strDocName = "Categories";

      // Close Main Switchboard form.
      Application.getCurrent().unload( this );

      // Give focus to Database window; select Categories table (first
      // form in list).
      //unsup DoCmd.SelectObject acTable, strDocName, True
      Exit_DisplayDatabaseWindow_Click: 
      return;

    }
    catch( Exception _e_ )
    {
      Err.set( _e_ );
      try 
      {
        JOptionPane.showMessageDialog( Screen.getActiveControl(), Err.getError().getDescription() );
        //unsup Resume Exit_DisplayDatabaseWindow_Click
        Err.clear();
      }
      catch( Exception _e2_ )
      {
      }
    }
  }

  private void Categories_Click()
  {
    try
    {
      OpenForms( "Categories" );
    }
    catch(Exception _e_) { Err.set(_e_,"Categories_Click"); }
  }

  private void Products_Click()
  {
    try
    {
      OpenForms( "Products" );
    }
    catch(Exception _e_) { Err.set(_e_,"Products_Click"); }
  }

  public void ExitMicrosoftAccess_Click()
  {
    // This code created by Command Button Wizard.
    try 
    {

      // Exit Microsoft Access.
      if( Application.getCurrent().getApplet() == null )  System.exit(0);

      Exit_ExitMicrosoftAccess_Click: 
      return;

    }
    catch( Exception _e_ )
    {
      Err.set( _e_ );
      try 
      {
        JOptionPane.showMessageDialog( Screen.getActiveControl(), Err.getError().getDescription() );
        //unsup Resume Exit_ExitMicrosoftAccess_Click
        Err.clear();
      }
      catch( Exception _e2_ )
      {
      }
    }
  }

  private void Sales_Reports_Dialog_Click()
  {
    try
    {
      OpenForms( "Sales Reports Dialog" );
    }
    catch(Exception _e_) { Err.set(_e_,"Sales_Reports_Dialog_Click"); }
  }

  // implementation of Listener interfaces

  public void actionPerformed( ActionEvent e )
  {
    if( e.getSource() == Suppliers )
    {
      Suppliers_Click();
    }
    else if( e.getSource() == Orders )
    {
      Orders_Click();
    }
    else if( e.getSource() == DisplayDatabaseWindow )
    {
      DisplayDatabaseWindow_Click();
    }
    else if( e.getSource() == Categories )
    {
      Categories_Click();
    }
    else if( e.getSource() == Products )
    {
      Products_Click();
    }
    else if( e.getSource() == ExitMicrosoftAccess )
    {
      ExitMicrosoftAccess_Click();
    }
    else if( e.getSource() == Sales_Reports_Dialog )
    {
      Sales_Reports_Dialog_Click();
    }
  }

  public void enableEvents()
  {
    Suppliers.addActionListener( this );
    Orders.addActionListener( this );
    DisplayDatabaseWindow.addActionListener( this );
    Categories.addActionListener( this );
    Products.addActionListener( this );
    ExitMicrosoftAccess.addActionListener( this );
    Sales_Reports_Dialog.addActionListener( this );
  }
}

Wenn ich mit der Maus über das if fahre, kann ich sehen, dass es aus der Klasse diamondedge.vb.VBGraphics stammt.

Vielleicht mache ich aber auch etwas anderes falsch? Als Desktop-Anwendung und mit AjaxSwing geht es ja auch...
 

Ebenius

Top Contributor
:wuerg: In dem Fall ist die Klasse diamondedge.vb.VBGraphics nicht mit einem Java-Compiler gebaut worden. Keine Ahnung was es noch so für Compiler für die JVM gibt, die sowas tun... Ich hab soetwas noch nicht gesehen. Vielleicht ein hässlicher Obfuscator? Die Klasse oben hast Du ja dekompiliert; mit dem JAD oder so... Keine Ahnung.

Ebenius
 
Zuletzt bearbeitet:

MathiasBauer

Bekanntes Mitglied
Die Klasse Main_Switchboard ist nicht decompiliert!
So wie ich sie gepostet habe wird sie mit anderen Klassen zusammen vom Konverter erzeugt.

Alles was der Konverter mir aus der Access-Anwendung erzeugt habe ich hier mal zum download bereit gestellt:

http://www.tischtennis-gross-zimmern.de/Access.zip

Alle Klassen können ohne weiteres in Eclipse eingefügt werden. Die Libraries nicht vergessen hinzuzufügen!

Wenn ihr noch eine ODBC Schnittstelle zur Datenbank einrichtet, bekommt ihr sogar Daten angezeigt (ist aber nicht zwingend notwendig, da die Applikation auch so läuft!).
 

Ebenius

Top Contributor
Nein, die Klasse diamondedge.vb.VbGraphics ist so wie so oben zu sehen ist dekompiliert. Ich bezweifele irgendwie, dass die Klasse tatsächlich so ...

... jetzt zweifele ich nicht mehr, sondern bin mir sicher, dass die Klasse nicht so aussieht wie Du sie oben geschrieben hast. Ich hab mir VbGraphics eben durch den jad gejagt, die kennt solche Felder nicht. Also hast Du entweder einen Bug in der IDE oder im Dateisystem oder musst mal deinen IDE-Workspace neu bauen oder die Bibliothek neu einbinden, oder, oder, oder.

[EDIT] ... und nochmal genauer hingeschaut fällt mir auf, dass der zweite Absatz schon gar nicht stimmt. :( Auch der JAD hat Probleme, die Klasse zu dekompilieren; ist nur so klug, für alle Felder einen Prefix "fld" zu setzen, wenn der Variablenname ein Schlüsselwort ist. Also entweder ist die Klasse korrupt (das .class-File im JAR) oder ein widerlicher Obfuscator hat absichtlich solchen Dreck fabriziert.

Ebenius
 
Zuletzt bearbeitet:

thE_29

Top Contributor
Wenn du einen Obfuscator drüberlaufen lässt, dann baut der dir die Variablennamen in if, do, etc.. um ;)
Also entweder hast du da was decompiliert oder ihr arbeitet mit einem Obfuscatenden Source ^^
 

MathiasBauer

Bekanntes Mitglied
Da die Firma einen einmaligen Konverter entwickelt hat, der aus VB Code Java Code generiert, ist es verständlich das sie evtl. einen Obfuscator eingesetzt haben.

Kurz und knapp, ich habe keine Chance die Swing-Applikation in Swingweb laufen zu lassen???
 
M

maki

Gast
Kurz und knapp, ich habe keine Chance die Swing-Applikation in Swingweb laufen zu lassen???
Ehrlich gesagt denke dass du die Firma selbst fragen solltest, da wir hier nur spekulieren können (bzw. ganz von so einem Vorgehen abraten ;) )
 

MathiasBauer

Bekanntes Mitglied
Also diamondedge brauche ich nicht zu fragen, da die Überführung in eine Java Swing Anwendung funktioniert hat. Es läuft zumindest. Jetzt brauche ich nur ein Framework, mit dem ich die Swing Anwendung mir als Webanwendung anzeigen lassen kann. Mit AjaxSwing geht es, aber leider nur dürftig und das ist auch kein Framework.
SwingWeb wäre eigentlich genau das richtige Framework, jedoch gibt es von denen keine Hilfestellung.

Was ich mir aber nicht erkären kann, dass die Swing Anwendung läuft. In Verbindung mit dem Framework aber der Tomcat folgenden Fehler auswirft:

Code:
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: Could not initialize class diamondedge.vb.Screen
	diamondedge.vb.VbGraphics.if(Unknown Source)
	diamondedge.vb.VbGraphics.scaleX(Unknown Source)
	diamondedge.vb.VbGraphics.setScaleMode(Unknown Source)
	diamondedge.vb.VbGraphics.<init>(Unknown Source)
	diamondedge.vb.VbPanel.<init>(Unknown Source)
	diamondedge.vb.JForm.<init>(Unknown Source)
	Main_Switchboard.<init>(Main_Switchboard.java:29)
	Northwind.getMain_Switchboard(Northwind.java:110)
	Northwind.init(Northwind.java:225)
	org.onemind.swingweb.util.SwingWebUtils.startAppletApp(SwingWebUtils.java:100)
	org.onemind.swingweb.util.SwingWebUtils.startApp(SwingWebUtils.java:230)
	org.onemind.swingweb.SwingWebAppManager.startApp(SwingWebAppManager.java:126)
	org.onemind.swingweb.servlet.SwingWebServlet.startApp(SwingWebServlet.java:58)
	org.onemind.swingweb.servlet.AbstractSwingWebServlet.doPost(AbstractSwingWebServlet.java:321)
	org.onemind.swingweb.servlet.AbstractSwingWebServlet.doGet(AbstractSwingWebServlet.java:157)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.

D.h. warum greift das Framework hier auf die diamondedge Klassen zurück? In der Swing Anwendung treten diese Fehler doch auch nicht auf!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
ReinerCoder Case statt if else Abfragen?! Allgemeine Java-Themen 8
M Variablen If - Else Wiederholungsfehler Allgemeine Java-Themen 3
L Vererbung If-Else ersetzen durch was? Allgemeine Java-Themen 20
O Darstellung von else if anweisung im struktogramm? Allgemeine Java-Themen 1
R Wie schaffe ich es, dass java zB 100 zählt ohne ständig "else if" hinschreiben zu müssen? Allgemeine Java-Themen 7
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
K Eclipse Alternativkonstrukte (Verzweigungen: if, switch,else..) Allgemeine Java-Themen 4
D if - else Baum vereinfachen Allgemeine Java-Themen 4
S Else-Anweisung Problem Allgemeine Java-Themen 17
B Berechnung von Punkten/ If-else Strategie?! Allgemeine Java-Themen 51
M if - else Abfrage beenden Allgemeine Java-Themen 4
P if(a) else if (b) else if (c) . Frage Allgemeine Java-Themen 2
G die mittlere von 5 Zahlen nur mit if und else finden Allgemeine Java-Themen 48
U Kompilieren einer großen Datei if-else = StackOverflowError Allgemeine Java-Themen 4
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
G switch case VS. if.else if Allgemeine Java-Themen 2
H if - else if-else bessere Lösung gesucht Allgemeine Java-Themen 4
H If anweisungen zu verschachtelt? else without if Allgemeine Java-Themen 8
D Performancefrage zu "else if" und "||" Allgemeine Java-Themen 10
G if . else ? Allgemeine Java-Themen 36
ruutaiokwu Per Reflection membervariablen überschreiben / zuweisen / nullen Allgemeine Java-Themen 5
R Reflection: Membervariablen-Initialwerte Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben