Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
denkspuren opened this issue Jul 11, 2024 · 0 comments
Open

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

denkspuren opened this issue Jul 11, 2024 · 0 comments

Comments

@denkspuren
Copy link
Owner

denkspuren commented Jul 11, 2024

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.");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant