.. das ich die Encoder noch nicht vernünftig auslesen kann .. Am Ende sind es doch 2 einfach digitale Eingänge pro Encoder? ..
Genau. Das Arbeiten der Encoder sieht ungefähr so aus - klick. Meine Dokumentation zur Auswertung sieht so aus - nochnklick - die Farbenliste [White] bis [Red] bezieht sich auf das Kabel für den Motoranschluss!!

Mit Java kann ich ja nu nicht helfen, aber vielleicht bietet Dir (m)ein C-Code-Schnippsel ne Hilfe oder zumindest nen Anhaltspunkt ? Wobei hier für Dich eher nur die IencdrX-Werte für die (Teil)Umdrehungen/Drehwinkel und die tmrEx-Werte für die Drehzahlmessung von Interesse sind.
Code:
// ============================================================================= =
// ===  Initialisierung der externen Interrupts bei m1284, doc 8272D-AVR-05/12
//      EXT_INT0 auf PORTD2 Pin 16  --  Encoder IencB0 auf PINC 2 Pin 24  und
//      EXT_INT1 auf PORTD3 Pin 17  --  Encoder IencB1 auf PINC 3 Pin 25
// ============================================================================= =
  void XTI_0_1_init( void )    // Initialisiere beide Interrupts auf RISING edge
 {                //  => EICRA ISC00/~01 + ~10/~11 auf 1     doc S68
  EICRA   |=  (1<<ISC01)|(1<<ISC00);    // INT0 triggert auf RISING edge
  EICRA   |=  (1<<ISC11)|(1<<ISC10);    // INT1 triggert auf RISING edge
  EIMSK   |=  (1<<INT0) | (1<<INT1);    // erlaube INT0 und INT1 in EIMSK  
// Initialisierung der Zeiten:            
  Iencdr0  =  Iz_diff0  =  Iz_yseci0  =  Iz_ysecv0  =  0;
  Iencdr1  =  Iz_diff1  =  Iz_yseci1  =  Iz_ysecv1  =  0;
  tmrE0  =  tmrE1  =  0;        // Timer für Drehzahlerfassung
 }      // Ende von void XTI_0_1_init( void )
// ============================================================================= =


// ============================================================================= =
// ===  Nicht unterbrechbare ISR für EXT_INT0 auf mega1284      ================ =
// Der Timer tmrE0 für Laufzeit des EXT_INT0 wird ausgelesen
 ISR(INT0_vect)                 // INT0 triggert auf RISING edge => 
 {                              //   => Wenn Aufruf, dann PORTD2 = high
//  ToggleBit (PTLED, LCr);     // rtLED toggeln
// - - - - - - - - - - - - - - - -
//      Encoderticks Iencdrx nur hochzählen, IencBx rauf- od runterzählen
  Iz_diff0  = tmrE0;    // Hier die Zeit (in x 50µs-tupsi) seit letztem ISR-Aufruf
  tmrE0     =    0;     // Resetten ##>> IN der ISR ohne CLI/SEI möglich
  Iencdr0 ++;           // Incrementiere Encodercounter, zählt NUR aufwärts
  if (IsBitSet (PINC, 2)) IencB0++;     // Rad treibt vorwärts,  math. negativ
  else                    IencB0--;     // Rad treibt rückwärts, math. positiv
 }      // Ende ISR(INT0_vect)
// ============================================================================= =


// ============================================================================= =
// ===  Nicht unterbrechbare ISR für EXT_INT1 auf mega1284      ================ =
//  Routine setzt einfach einen Zähler hoch.
//  Sonst wie ISR für EXT_INT0 für Motor li,re und PWM/Geschw.
 ISR(INT1_vect)                         // hiess mal: ISR(SIG_INTERRUPT1)
 {                                      //
//  ToggleBit (PTLED, LCr);     // rtLED toggeln
// - - - - - - - - - - - - - - - -
//      Encoderticks Iencdrx nur hochzählen, IencBx rauf- od runterzählen
  Iz_diff1  = tmrE1;    // Hier die Zeit (in x 50µs-tupsi) seit letztem ISR-Aufruf
  tmrE1     =    0;     // Resetten ##>> IN der ISR ohne CLI/SEI möglich
  Iencdr1 ++;           // Incrementiere Encodercounter, zählt NUR aufwärts
  if (IsBitSet (PINC, 3)) {IencB1--;}   // Rad treibt rückwärts (math. positiv)
  else                    {IencB1++;}   // Rad treibt vorwärts (math. negativ)
 }      // Ende ISR(INT1_vect)
// ============================================================================= =