【发布时间】:2022-10-12 22:45:10
【问题描述】:
所以,我想知道Scanner 是否可以从System.in 读取,它是从JFrame 设置的。这就是我的意思。
这是我的WriteToSystemIn(JFrame 类),它是程序的 GUI 部分。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
public class WriteToSystemIn extends JFrame {
private static class ChangeNumber implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
ByteArrayInputStream s = null;
try {
s = new ByteArrayInputStream("1\n".getBytes("UTF-8"));
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException(ex);
}
System.setIn(s);
}
}
WriteToSystemIn() {
JButton button = new JButton("try click it m8");
button.addActionListener(new ChangeNumber());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(button);
this.setVisible(true);
this.pack();
}
}
这就是程序的Main 函数。
import java.util.Scanner;
public class Main {
private static class MainRunnable implements Runnable {
@Override
public void run() {
new WriteToSystemIn();
}
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new MainRunnable());
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
System.out.println(s);
System.out.println("ended");
}
}
因此,当从WriteToSystemIn 按下按钮时,它应该将“1\n”写入System.in 以供Scanner 读取。
但是,它没有这样做。它不会读取任何内容。打印到System.out 没有问题,所以我认为这不是问题,但显然我错了。所以,我在这里想知道,我在这里做错了什么吗?或者,我是否正在尝试做一些不可能的事情?
【问题讨论】:
标签: java swing java.util.scanner system.in