JOptionPane.showInputDialog() è un metodo che è sottoposto ad overload.
Tu stai usando una versione di tale metodo che non ti serve... se passi "null" come primo argomento e una stringa come secondo argomento, quale di queste versioni verrà invocata?

showInputDialog(Object message, Object initialSelectionValue)
showInputDialog(Component parentComponent, Object message)

in questo momento non lo so e non ho nessuna intenzione di andarlo a verificare... rimane il problema che, per quel che desideri fare, c'è un metodo molto più specializzato:

showInputDialog(Object message)

Detto questo, per controllare se l'utente ha premuto il pulsante "Annulla" ti è sufficiente verificare che il valore restituito sia nullo. Infatti, se l'utente non digita nulla e conferma viene restituita una stringa vuota; al contrario, se l'utente annulla l'inserimento viene restituito null. E non c'è nemmeno bisogno della variabile booleana supplementare:

codice:
do {
   k = -2;   // Valore di default (non valido)
   String value = JOptionPane.showInputDialog("Inserisci il numero di direzioni per costruire la matrice A: ");
   if (value != null) {
      try{
         k = Integer.parseInt( value );
      }catch(NumberFormatException e ){
         k = -2;   // Non serve, ma non fa male
      }
      if (k < 0) {
         JOptionPane.showMessageDialog(null, "ATTENZIONE! È STATO INSERITO UN VALORE ERRATO.\nINSERIRE UN NUMERO INTERO POSITIVO", "ATTENZIONE!", JOptionPane.WARNING_MESSAGE); 
      }
   } else {
      // L'utente ha annullato l'inserimento
      k = -1;
   }
} while (k < -1);
Se esci dal do/while dovrai controllare che il valore di k sia >= 0 per procedere, altrimenti significa che l'utente ha annullato l'inserimento e ti comporterai di conseguenza.


Ciao.