Skip to content

Blockierende Nutzereingabe, um Skript-Ausführung anzuhalten #45

@denkspuren

Description

@denkspuren

Die JShell lässt sich, wenn der Code mit /open geöffnet wurde, durch keines dieser Mittel in der Codeausführung blockieren. Eine direkte Eingabe in der JShell funktioniert hingegen schon.

Console console = System.console();
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
Scanner reader = new Scanner(System.in);

Das Problem ließt sich einzig durch ein AWT-Dialogfenster(!) mit einem blockierenden OK-Button lösen. Man könnte vielleicht eine View ergänzen, die diese Aufgabe im LVP übernimmt. Eine blockierende Nutzereingabe soll hier vorrangig dazu dienen, eine Live View anzuhalten, um z.B. eine Animation in ihr zu betrachten, um dann kontrolliert die weitere Ausführung des Code fortzusetzen (mit einer weiteren Nutereingabe, wie einzig die Eingabe-Taste zu drücken).

Der AWT-Code, von ChatGPT generiert:

import java.awt.*;
import java.awt.event.*;

public class BlockingDialog extends Dialog {
    private boolean buttonPressed = false;

    public BlockingDialog(Frame owner) {
        super(owner, "Blocking Dialog", true);
        setLayout(new FlowLayout());
        setSize(300, 150);

        Button okButton = new Button("OK");
        okButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                buttonPressed = true;
                setVisible(false);
            }
        });

        add(okButton);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                buttonPressed = true;
                setVisible(false);
            }
        });

        setLocationRelativeTo(null);
    }

    public boolean isButtonPressed() {
        return buttonPressed;
    }
}

// Erstellen und anzeigen des Dialogs
Frame frame = new Frame();
BlockingDialog dialog = new BlockingDialog(frame);

// Blockieren bis der OK-Button gedrückt wird
dialog.setVisible(true);

// Nachdem der Dialog geschlossen wurde, wird die Ausführung hier fortgesetzt
System.out.println("OK-Button wurde gedrückt, die Ausführung wird fortgesetzt.");

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions