Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
hab ich n fehler in der optik oder sind die 2 bilder gleich?
und weiterhin, welche if-bedingung, zeig mal code, dann wird die frage vielleicht verständlicher ???:L
Ich drucke die "READ" Taste, folgender Teil wird ausgeführt,
Java:
private void diReadButton_2ActionPerformed(java.awt.event.ActionEvent evt) {
int deviceID = 0;
DataType.Rd4DeviceInfoWindow = true; // dressup Firmware value for display
try
{
deviceID = Integer.parseInt( diDevIdSpinner_2.getModel().getValue().toString() );
GUIManager.RefreshDeviceInfo_2( deviceID, devInformationFrame );
/* new MessageBoxOK( "Read OK",
"Device ID " + deviceID + " @ " + serialMaster.params.getPortName(),
MessageBox.IconType.INFO, this.getFrame() ); */
// ReadCompleteMsgBox.setVisible(true);
// ReadCompleteMsgBox.ReadSuccessfulFrame bx = new ReadCompleteMsgBox.ReadSuccessfulFrame();
// bx.setVisible(true);
// ReadSuccessfulFrame.setVisible(true);
CstMsgBox box = new CstMsgBox(devInformationFrame,true);
box.displayCstMsgBox("Read successful, device ID" + deviceID);
}
catch (ModbusException ex)
{
/* new MessageBoxOK( "Read Failed",
"Device ID " + deviceID + " @ " + serialMaster.params.getPortName()
//+ "\n" + ex.getMessage()
+ "\nPlease try again.",
MessageBox.IconType.EXCLAMATION, null );*/
CstMsgBox box = new CstMsgBox(devInformationFrame,true);
box.displayCstMsgBox("Read failed, device ID" + deviceID);
}
catch (NullPointerException ex)
{
/*new MessageBoxOK( "Read Failed", "No device is detected",
MessageBox.IconType.CRITICAL, null );*/
CstMsgBox box = new CstMsgBox(devInformationFrame,true);
box.displayCstMsgBox("Read failed, no device is detected !");
}
}
dieser ActionEvent ruft Funktion, weiter unten, auf, die RefreshDeviceInfo Funktion befindet sich in der GUIManager Klasse, und mein Frame befindet sich in der deviceInformationFrame Klasse welche auch den "READ" Button Event beinhaltet.
devInfFrObject_2 is Onbjekt der Klasse deviceInformationFrame
Java:
static void RefreshDeviceInfo_2( int deviceID, JFrame frame )
throws ModbusException, NullPointerException
{
AddrTbl.DeviceInfo deviceInfo;
DataType.Type type;
int highword = 0;
//GUI is object of calss OsensaVieView and serialMaster is OsensaViewViews variable
Register[] deviceInfoRegs = GUI.serialMaster.getDeviceInfo( deviceID );
if ( DEBUG.Modbus ) FTXModbus.printRegs( deviceInfoRegs );
// traverse through enum values in sequence
for ( int i = AddrTbl.DeviceInfo._START.getCode() - AddrTbl.StartBase, regIdx = 0;
i <= AddrTbl.DeviceInfo._END.getCode() - AddrTbl.EndBase; i++, regIdx++ )
{
deviceInfo = AddrTbl.DeviceInfo.get( i );
type = deviceInfo.getType();
if ( type == DataType.Type.UNDEFINED )
{
// this register has no association, skip it
}
else if ( type == DataType.Type.HIGHWORD )
{
// buffer current register to be combine with the next one, the low word
// make this the high word by shifting it to high word position
highword = deviceInfoRegs[regIdx].toUnsignedShort() << 16;
//highword = 0x0282 << 16; // test - passed
}
else if ( type == DataType.Type.SERIALNUM )
{
// current word is the low word counterpart of previous high word
// combine the current word with the high word
int value = highword | deviceInfoRegs[regIdx].toUnsignedShort();
//int value = highword | 0x65DC; // test - passed
if ( frame == devInfFrObject_2.devInformationFrame )
{
RefreshComponent( ComponentRegistry.DeviceInfo4Rd_diFrame.get( deviceInfo ),
type.toGUI( value ) );
}
else
{
RefreshComponent( ComponentRegistry.DeviceInfo4Rd.get( deviceInfo ),
type.toGUI( value ) );
}
}
else if ( type == DataType.Type.CHANCONFIG )
{
if ( frame == devInfFrObject_2.devInformationFrame )
{
RefreshComponent( ComponentRegistry.DeviceInfo4Rd_diFrame.get( deviceInfo ),
type.toGUI( deviceInfoRegs[regIdx].toUnsignedShort() ) );
}
else
{
RefreshComponent( ComponentRegistry.DeviceInfo4Rd.get( deviceInfo ),
type.toGUI( deviceInfoRegs[regIdx].toUnsignedShort() ) );
}
}
else
{
// retrieve value according to DataType.Type and refresh associated component
if ( frame == devInfFrObject_2.devInformationFrame )
{
RefreshComponent( ComponentRegistry.DeviceInfo4Rd_diFrame.get( deviceInfo ),
type.toGUI( deviceInfoRegs[regIdx].toUnsignedShort() ) );
}
else
{
RefreshComponent( ComponentRegistry.DeviceInfo4Rd.get( deviceInfo ),
type.toGUI( deviceInfoRegs[regIdx].toUnsignedShort() ) );
}
}
}
}
mit der if Bedingung meine ich, in der RefreshDeviceInfo_2 Funktion die Zeile else if ( type == DataType.Type.SERIALNUM ) wird noch ausgeführt, aber die folgende if ( frame == devInfFrObject_2.devInformationFrame ) Bedingung nicht mehr,
frame und devInfFrObject_2.devInformationFrame sind beinah identisch, wie man es auch auf den Bildern oben erkennen kann, nur, dass bei dem Zweiten Bild für devInfFrObject_2.devInformationFrame der Parameter "hidden" enthalten ist (gelbe Zeile), die frame Variable hat aber diese "hidden" Eigenschaft nicht (siehe Bild nummero eins), woraus ich dann schliese, dass das der Grund ist, wieso if ( frame == devInfFrObject_2.devInformationFrame ) niemals wahr ist.
frame und devInfFrObject_2.devInformationFrame sind beinah identisch, wie man es auch auf den Bildern oben erkennen kann, nur, dass bei dem Zweiten Bild für devInfFrObject_2.devInformationFrame der Parameter "hidden" enthalten ist (gelbe Zeile), die frame Variable hat aber diese "hidden" Eigenschaft nicht (siehe Bild nummero eins), woraus ich dann schliese, dass das der Grund ist, wieso if ( frame == devInfFrObject_2.devInformationFrame ) niemals wahr ist.
ist nur genau dann war, wenn es sich um die selben(!) Instanzen handelt. Du kannst die beiden Frames genau identisch konfigurieren, trotzdem wird der Vergleich auch dann niemals wahr werden.
Das verstehe ich jetzt leider nicht so ganz. Ich rufe ja die Funktion RefreshDeviceInfo auf, der Aufruf befindet sich in der Klasse deviceInformationFrame. Als Parameter tu ich devInformationFrame, also der Name des Frames, übergeben.
Meine if Bedingung if( frame == devInfFrObject_2.devInformationFrame ) defindet sich in der GUIManager Klasse, und dafür muss ich doch ein Object der Klasse deviceInformationFrame kreieren um auf die Parameter und Funktionen der deviceInformationFrame Klasse zuzugreifen!?
Mein Objekt der Klasse deviceInformationFrame ist,
Java:
static deviceInformationFrame devInfFrObject_2 = new deviceInformationFrame();
OK, es funktioniert jetzt, aber ich verstehe immer noch nicht warum. Hab folgendes geändert,
in meinem deviceInformationFrame Constructor, rufe ich den Constructor der GUIManager Klasse, welche auch die if Bedingung beinhaltet,
Java:
public deviceInformationFrame() {
initComponents();
new GUIManager(this,9);
}
der Constructor der GUIManager Klasse sieht folgendermaßen aus,
Java:
//constructor, where the object of deviceInformationFrame is //created
GUIManager( deviceInformationFrame _GUI, int void_variable )
{
GUI_2 = _GUI;
}
wenn ich jetzt den Vergleich durchführe klappt alles prima, ich komme in die if Bedingung,
Java:
if ( frame == GUI_2.devInformationFrame )
Nur meine Frage ist, warum hat es vorher nicht funktioniert, als ich ein Objekt der deviceInformationFrame Klasse direkt in der GUIManager Klasse kreiert hatte, wie in meinem vorherigen Post geschrieben steht.