Pergunta

Ei, eu tenho vindo a desenvolver uma aplicação no console do Windows com Java, e quero colocá-lo on-line em toda a sua consola-gráficos de glória.

Existe uma API simples aplicação web que eu posso usar a porta meu aplicativo mais?

Estou apenas usando a funcionalidade básica System.out e System.in, mas estou feliz para reconstruir meus invólucros de I / O.

Eu acho que algo nesse sentido seria um grande trunfo para qualquer começando desenvolvedores Java que querem colocar seu trabalho online.

Foi útil?

Solução

Claro, basta ter em um applet, colocar uma pequena UI balanço nele com um JFrame com dois componentes - um para escrever a saída para, e um para entrar entradas de. Incorporar o applet na página.

Outras dicas

Eu fiz como Lars sugerido e escrevi o meu próprio.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.awt.Font;

public class Applet extends JFrame {
    static final long serialVersionUID = 1;

    /** Text area for console output. */
    protected JTextArea textArea;

    /** Text box for user input. */
    protected JTextField textBox;

    /** "GO" button, in case they don't know to hit enter. */
    protected JButton goButton;

    protected PrintStream printStream;
    protected BufferedReader bufferedReader;

    /**
     * This function is called when they hit ENTER or click GO.
     */
    ActionListener actionListener = new ActionListener() {
        public void actionPerformed(ActionEvent actionEvent) {
            goButton.setEnabled(false);
            SwingUtilities.invokeLater(
                new Thread() {
                    public void run() {
                        String userInput = textBox.getText();
                        printStream.println("> "+userInput);
                        Input.inString = userInput;
                        textBox.setText("");
                        goButton.setEnabled(true);
                    }
                }   
            );
        }
    };

    public void println(final String string) {
        SwingUtilities.invokeLater(
            new Thread() {
                public void run() {
                    printStream.println(string);
                }
            }   
        );
    }

    public void printmsg(final String string) {
        SwingUtilities.invokeLater(
            new Thread() {
                public void run() {
                    printStream.print(string);
                }
            }   
        );
    }

    public Applet() throws IOException {
        super("My Applet Title");

        Container contentPane = getContentPane();

        textArea = new JTextArea(30, 60);
        JScrollPane jScrollPane = new JScrollPane(textArea);
        final JScrollBar jScrollBar = jScrollPane.getVerticalScrollBar();
        contentPane.add(BorderLayout.NORTH, jScrollPane);
        textArea.setFocusable(false);
        textArea.setAutoscrolls(true);
        textArea.setFont(new Font("Comic Sans MS", Font.TRUETYPE_FONT, 14));

        // TODO This might be overkill
        new Thread() {
            public void run() {
                while(true) {
                    jScrollBar.setValue(jScrollBar.getMaximum());
                    try{
                        Thread.sleep(100);
                    } catch (Exception e) {}
                }
            }
        }.start();

        JPanel panel;
        contentPane.add(BorderLayout.CENTER, panel = new JPanel());

        panel.add(textBox = new JTextField(55));
        textBox.addActionListener(actionListener);

        panel.add(goButton = new JButton("GO"));
        goButton.addActionListener(actionListener);

        pack();

        // End of GUI stuff

        PipedInputStream inputStream;
        PipedOutputStream outputStream;

        inputStream = new PipedInputStream();
        outputStream = new PipedOutputStream(inputStream);

        bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "ISO8859_1"));
        printStream = new PrintStream(outputStream);

        new Thread() {
            public void run() {
                try {
                    String line;
                    while ((line = bufferedReader.readLine()) != null) {
                        textArea.append(line+"\n");
                    }
                } catch (IOException ioException) {
                    textArea.append("ERROR");
                }
            }
        }.start();
    }
}

Este código abaixo foi em uma classe separada, "Input", que tem um estático "inString" string.

    public static String getString() {
        inString = "";

        // Wait for input
        while (inString == "") {
            try{
                Thread.sleep(100);
            } catch (Exception e) {}
        }

        return inString;
    }

Durante todo o tempo de vida do projeto eu provavelmente irá manter este código um pouco mais, mas neste momento - ele funciona:)

Como um exemplo premier de um glorioso e incrivelmente útil cnsole-like webapp, consulte goosh , a Shell Google. Eu não posso imaginar a navegar na Net sem ele.

Com certeza, não há código fonte, mas você pode sair um pouco da sua magia usando Firebug ou assim.

Usando um TextArea pode ser uma abordagem bug-propensa. Lembre-se que você vai precisar para fazer entrada e saída para este TextArea e que deve, portanto, manter o controle de posição do cursor. Gostaria de sugerir que, se você realmente fazer essa abordagem, você afastado abstrato sobre um TextArea simples (herança, talvez?) E usar um componente que tem, por exemplo, um prompt() para mostrar o prompt e permitir entrada e um também segue a abstração shell usual de ter stdin (um InputStream, que lê a partir do prompt, mas pode ser obrigado a, digamos arquivos ou assim) e stdout e possivelmente stderr, OutputStreams, vinculados ao texto da TextArea.

Não é uma tarefa fácil, e eu não sei de qualquer biblioteca para fazê-lo.

Eu lembro de ter visto cliente telnet miniaplicativo implementationa torno de anos atrás (quando as pessoas usadas telnet). Talvez você poderia desenterrá-los e modificá-los.

System.out e System.in são estática e, portanto, mal. Você precisa passar por seu programa substitui-los com os não-estática ( "parametrizar de cima"). De um applet você não pode usar System.setOut / setErr / Setin.

Em seguida, você está muito bem classificada. Um applet. Adicionar uma área de texto (ou equivalente). saída de acréscimo para a área de texto. Escrever cursos chaves para a entrada. Trabalho feito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top