Mam aplikację SWING i mam problem z użyciem Matcher'a. W projekcie są dwie klasy MainWindow.java czyli GUI i MainWindowLogic.java czyli zachowanie. Po naciśnięciu pewnego buttona MainWindow.java wywołuje metodę
public static void Generuj(String Q_Str, String E_Str, String q0_Str, String d_Str, String F_Str)
z drugiej klasy.
Wywołanie wygląda następująco:
private void Button_GenerujActionPerformed(java.awt.event.ActionEvent evt) {
MainWindowLogic.Generuj(Text_LiczbaStanow.getText(), Text_LiczbaWejsc.getText(), Text_StanPoczatkowy.getText(), Text_FunkcjaPrzejsc.getText(), Text_StanyAkceptowane.getText());
}
Ciało funkcji wygląda tak:
private static final Pattern pattern_rows = Pattern.compile(".*;");
private static final Pattern pattern_numbers = Pattern.compile("\\d+");
public static void Generuj(String Q_Str, String E_Str, String q0_Str, String d_Str, String F_Str) {
int Q = Integer.parseInt(Q_Str);
int E = Integer.parseInt(E_Str);
int q0 = Integer.parseInt(q0_Str);
int d[][];
d = new int[Q][];
for (int[] row : d) {
row = new int[E];
}
Matcher matcher_rows = pattern_rows.matcher(d_Str);
Matcher matcher_numbers;
for (int[] row : d) {
matcher_numbers = pattern_numbers.matcher(matcher_rows.group());
for (int cell : row) {
cell = Integer.parseInt(matcher_numbers.group());
}
}
List<Integer> F_List = new ArrayList<>();
matcher_numbers = pattern_numbers.matcher(F_Str);
String tmp;
while (!"".equals(tmp = matcher_numbers.group()))
F_List.add(Integer.parseInt(tmp));
int F[] = new int[F_List.size()];
Iterator<Integer> iterator_F_List = F_List.iterator();
for (int i = 0; i <F_List.size(); i++) {
F[i] = iterator_F_List.next();
}
try {
myDFA = new DeterministicFiniteAutomaton(Q, E, q0, d, F);
}
catch (WrongStatesNumberException | WrongSymbolsNumberException | WrongSizeTransitionTableException | WrongStateIndexException e) {
}
}
Problem pojawia się przy pierwszym wywołaniu:
matcher_numbers = pattern_numbers.matcher(matcher_rows.group());
a dokładnie
matcher_rows.group()
który generuje wyjątek typu IllegalStateException z wiadomością "No match found", niezależnie od tego jaki string podaję mu do porównania.
Proszę o pomoc w zrozumieniu dlaczego tak się dzieje, co jest nie tak.
Z góry dziękuję.