2008-09-26 18 views
5

अरे, मैं जावा के साथ विंडोज कंसोल में एक एप्लीकेशन विकसित कर रहा हूं, और इसे अपने सभी कंसोल-ग्राफिक्स-महिमा में ऑनलाइन रखना चाहता हूं।जावा - कंसोल की तरह वेब एप्लेट

क्या कोई साधारण वेब एप्लेट एपीआई है जिसका उपयोग मैं अपने ऐप को बंद करने के लिए कर सकता हूं?

मैं केवल बुनियादी System.out और System.in कार्यक्षमता का उपयोग कर रहा हूं, लेकिन मुझे अपने आई/ओ रैपरों का पुनर्निर्माण करने में खुशी है।

मुझे लगता है कि इन लाइनों के साथ कुछ भी जावा डेवलपर्स के लिए कुछ अच्छी संपत्ति होगी जो अपना काम ऑनलाइन रखना चाहते हैं।

उत्तर

4

निश्चित रूप से, केवल एक एप्लेट में बनाओ, एक छोटे स्विंग यूआई को एक जेएफआरएएम के साथ दो घटकों के साथ रखें - एक आउटपुट लिखने के लिए, और इनपुट से प्रवेश करने के लिए एक। पृष्ठ में एप्लेट एम्बेड करें।

+0

हो गया, नीचे दिए गए परिणाम था। धन्यवाद लार्स! –

0

मुझे लगता है कि पिछले साल पहले देखा गया टेलिनेट क्लाइंट एप्लेट कार्यान्वयन (वापस जब लोग टेलनेट का इस्तेमाल करते थे)। शायद आप उन्हें खोद सकते हैं और उन्हें संशोधित कर सकते हैं।

0

System.out और System.in स्थिर हैं और इसलिए बुराई है। आपको गैर-स्टेटिक्स ("ऊपर से पैरामीटर") के साथ बदलने के लिए अपने प्रोग्राम से गुज़रना होगा। एक एप्लेट से आप System.setOut/setErr/setIn का उपयोग नहीं कर सकते हैं।

फिर आप बहुत अधिक क्रमबद्ध हैं। एक एप्लेट एक टेक्स्ट एरिया (या समतुल्य) जोड़ें। पाठ क्षेत्र में आउटपुट संलग्न करें। इनपुट में कुंजी स्ट्रोक लिखें। काम हो गया।

+0

मैं केवल अपने आईओ क्लास रैपर में System.in और System.out का उपयोग करता हूं - इसलिए इसमें बहुत अधिक समय नहीं लगेगा। तो मुझे लगता है कि उत्तर सिर्फ टेक्स्टएरिया का उपयोग करना है। धन्यवाद! –

3

एक शानदार और अविश्वसनीय रूप से उपयोगी cnsole- जैसे वेबपैप के एक प्रमुख उदाहरण के रूप में, कृपया goosh, Google शैल देखें। मैं इसके बिना नेट ब्राउज़िंग की कल्पना नहीं कर सकता।

अनुमोदित, कोई स्रोत कोड नहीं है, लेकिन आप फायरबग या अन्य का उपयोग कर अपने जादू का थोड़ा सा हिस्सा निकाल सकते हैं।

टेक्स्टएरिया का उपयोग करना एक बग-प्रवण दृष्टिकोण हो सकता है। याद रखें कि आपको इस टेक्स्ट एरिया में इनपुट और आउटपुट दोनों करने की आवश्यकता होगी और आपको इस प्रकार कर्सर की स्थिति का ट्रैक रखना होगा। मैं सुझाव दूंगा कि, यदि आप वास्तव में इस दृष्टिकोण को करते हैं, तो आप एक सादा TextArea (विरासत, शायद?) पर दूर हो जाते हैं और एक घटक का उपयोग करते हैं, उदाहरण के लिए प्रॉम्प्ट दिखाने और इनपुट सक्षम करने के लिए prompt() और stdin (एक इनपुटस्ट्रीम, जो प्रॉम्प्ट से पढ़ता है, लेकिन बाध्य हो सकता है, चलो फाइलें या तो) और stdout और संभवतः stderr, आउटपुटस्ट्रीम, टेक्स्ट एरिया के पाठ से बंधे हैं।

यह एक आसान काम नहीं है, और मुझे ऐसा करने के लिए किसी पुस्तकालय के बारे में पता नहीं है।

4

मैंने Lars के रूप में किया और अपना खुद का लिखा।

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(); 
    } 
} 

यह नीचे कोड एक अलग वर्ग "इनपुट" में था, जिसमें स्थिर "इनस्ट्रिंग" स्ट्रिंग है।

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

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

     return inString; 
    } 

के माध्यम से बाहर परियोजना के जीवन काल मैं शायद कुछ और इस कोड को बनाए रखने के लिए होगा, लेकिन इस बिंदु पर - यह काम करता है :)

संबंधित मुद्दे