Я предполагаю, что вы очень плохо знакомы с Java и, возможно, программируете, иначе вам сложно объяснить ваши дизайнерские решения.
Для начала вы правильно поняли один принцип проектирования: класс должен делать одно. Так что ваш MainClassTestPrompts
запрашивает имя пользователя и пароль, а ваш SecondaryClassUseCredentials
хочет что-то с ними сделать. Это называется разделением интересов.
Ошибка в том, чтобы использовать main
в обоих случаях или использовать метод без возвращаемого типа. Поскольку main
используется в качестве точки входа в приложение, было бы лучше вообще не использовать main
в этих двух классах - они являются частью бизнес-логики, и проводка приложения должна быть еще одной проблемой.
Итак, что вы можете сделать, это определить одну пару класс / метод, которая запрашивает учетные данные и возвращает те, а другая - тот, который вызывает первый и использует его результат. Выполняя по одному шагу за раз Я сохраню статические методы и не буду вводить интерфейсы, хотя я обычно советую:
class MainClassTestPrompts {
static Map.Entry<String, String> askForCredentials() {
JTextField username = new JTextField();
JTextField password = new JPasswordField();
Object[] DBInputBox = { "Username:", username, "Password:", password };
JOptionPane.showConfirmDialog(null, DBInputBox, "Login", JOptionPane.OK_CANCEL_OPTION);
return new SimpleEntry<>(username.getText(), password.getText());
}
}
Теперь ваш класс вызывающего может выглядеть так:
class SecondaryClassUseCredentials {
static void doSomething() {
Map.Entry<String, String> credentials = MainClassTestPrompts.askForCredentials();
String username = credentials.getKey();
String password = credentials.getValue();
...
}
}
Для следующей итерации попробуйте избавиться от статики и использовать интерфейсы. Чтобы оставить вам что-то попробовать самостоятельно, я лишь предложу, как может выглядеть SecondaryClassUseCredentials
:
class SecondaryClassUseCredentials {
private final Supplier<Map.Entry<String, String>> credentialsSupplier;
SecondaryClassUseCredentials(Supplier<Map.Entry<String, String>> credentialsSupplier) {
this.credentialsSupplier = credentialsSupplier;
}
static void doSomething() {
Map.Entry<String, String> credentials = credentialsSupplier.get();
String username = credentials.getKey();
String password = credentials.getValue();
...
}
}