Я позаимствовал проект, который я нашел в stackoverflow, чтобы перенаправить вывод консоли в графический интерфейс. Он работал нормально, пока я не начал читать текстовые файлы в своей программе. Теперь, когда я запускаю программу с помощью графического интерфейса, вывод не выводится, и графический интерфейс зависает, а затем закрывается сам по себе. Вот похудела версия моего GUI код:Перенаправление вывода консоли в GUI
public class GreenhouseControlsGUI {
public static class MyGui extends JFrame implements ActionListener {
// Start button
JButton Start = new JButton("Start");
/..................................../
/**
* The constructor.
*/
public MyGui(){
super("Greenhouse Controls");
/............................../
bottomPanel.setLayout(new FlowLayout());
bottomPanel.add(Start);
/............................../
getContentPane().add(holdAll, BorderLayout.CENTER);
Start.addActionListener(this);
/............................../
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == Start)
GreenhouseControls.startMeUp(); // Start program...
/............................../
}
public static void main(String[] args){
MyGui myApplication = new MyGui();
// redirect output to GUI
myApplication.redirectSystemStreams();
// Specify where will it appear on the screen:
myApplication.setLocation(10, 10);
myApplication.setSize(500, 300);
// Show it!
myApplication.setVisible(true);
}
private void updateTextArea(final String text) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
myText.append(text);
}
});
}
private void redirectSystemStreams() {
OutputStream out = new OutputStream() {
@Override
public void write(int b) throws IOException {
updateTextArea(String.valueOf((char) b));
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
updateTextArea(new String(b, off, len));
}
@Override
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}
};
System.setOut(new PrintStream(out, true));
System.setErr(new PrintStream(out, true));
}
}
}
Я уверен, что моя проблема начинается с чтения из «имя файла» путь в коде ниже, потому что у меня нет этой проблемы, когда я свой комментарий Выражение переменной 'filename'. Я думал, что методы перенаправления консольного вывода в мой графический интерфейс были только перенаправлением вывода ... Почему все это забивает, когда я читаю из файла? Я новичок в программировании, и я, вероятно, не заметил ничего очевидного, но я не могу понять.
Вот статический метод startMeUp() вызывается внутри класса GUI:
public static void startMeUp() {
try {
String option = "-f"; // (-f) to start program or (-d) to restore program
filename = "src/greenhouse/examples3.txt"; // read file from here
dumpFile = "dump.out"; // restore program from here
// if option is invalid invoke corresponding print statement
if (!(option.equals("-f")) && !(option.equals("-d"))) {
System.out.println("Invalid option");
printUsage();
}
GreenhouseControls gc = new GreenhouseControls(); // Create GreenhouseControls object
Restart restart = new Restart(0,filename, gc); // Create Restart object
Restore restore = new Restore(0,dumpFile); // Create Restore object
// if the option value is -f ...
if (option.equals("-f")) {
gc.addEvent(restart); // add new Restart object to addEvent()
}
gc.run();
// if the option value is -d ...
if (option.equals("-d")) {
gc.addEvent(restore); // add new Restore object to addEvent()
}
gc.run();
}catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Invalid number of parameters");
printUsage();
}
}
моей доброте какая ужасная идея, перенаправляя STDERR. Конечно, это затруднит отладку этой проблемы. Выделите строку 'System.setErr (новый PrintStream (out, true)) и повторите попытку. Вы видите что-нибудь в окне консоли/терминала? –
Пробовал ваше предложение, и у меня все еще такая же проблема. Нет вывода на графический интерфейс пользователя – LooMeenin
о том, что на * консоли * или * окне терминала *? Я не говорю о графическом интерфейсе. У вас есть открытая консоль или терминал? –