При компиляции, данный участок кода зависает. GUI Java
Это часть основного кода. При компиляции ошибок нет, но после того как ввожу числа от 0 до 9 и нажимаю Continue. Кнопка залипает и не отпускается + интерфейс должен пропасть, но не пропадает. Никакого вывода нет.
class alkashSP extends JFrame {
JTextField jta = new JTextField(10);
Font fnt = new Font("Times new roman", Font.BOLD, 25);
alkashSP() {
super("Input your cards. Like 2 5 6...");
setLayout(new FlowLayout());
setSize(300, 125);
add(jta);
jta.setForeground(Color.BLACK);
jta.setFont(fnt);
JButton contButton = new JButton("Continue");
contButton.setBounds(10, 40, 0, 10);
add(contButton);
jta.getText();
contButton.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
var sp = new Stack<Integer>();
var reader = new BufferedReader(new InputStreamReader(System.in));
String input = null;
try {
input = reader.readLine();
} catch (IOException ioException) {
ioException.printStackTrace();
}
var split = input.split(" ");
for (var t : split)
{
sp.push(Integer.parseInt(t));
}
}
@Override
public void mousePressed(MouseEvent e) { }
@Override
public void mouseReleased(MouseEvent e) { }
@Override
public void mouseEntered(MouseEvent e) { }
@Override
public void mouseExited(MouseEvent e) { }
});
}
}
Ответы (1 шт):
Автор решения: Dareten
→ Ссылка
Ваш нынешний код проще переписать примерно вот так:
import javax.swing.*;
import java.awt.*;
import java.util.Stack;
class Main extends JFrame {
JTextField jta = new JTextField(10);
Font fnt = new Font("Times new roman", Font.BOLD, 25);
Stack<Integer> sp = new Stack<>();
public static void main(String[] args) {
JFrame frame = new Main();
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
Main() {
super("Input your cards. Like 2 5 6...");
setLayout(new FlowLayout());
setSize(300, 125);
add(jta);
jta.setForeground(Color.BLACK);
jta.setFont(fnt);
JButton contButton = new JButton("Continue");
contButton.setBounds(10, 40, 0, 10);
add(contButton);
contButton.addActionListener(ae -> {
String[] cards = jta.getText().split(" ");
for (String card : cards) {
sp.push(Integer.parseInt(card));
}
});
}
}
На кнопку навешивается обычный ActionListener, потому что остальное излишне. Массив строк считывается из поля ввода. Тут надо еще добавить проверку на наличие всех 10 цифр в массиве и делить карты между двумя игроками.