दिलचस्प पोस्ट
मैं कैसे जांचूं कि एक jQuery तत्व DOM में है या नहीं? मल्टी टेंगमेंट गतिविधि में कैसे चुने गए हैं? एंड्रॉइड: एक छवि दृश्य स्क्रॉल करना कैसे iPhone फोटो लाइब्रेरी के लिए तस्वीर को बचाने के लिए? अपरिभाषित ऑफसेट PHP त्रुटि उद्देश्य सी में स्ट्रिंग रूपांतरण कैसे करें? नोड। जेएस में एक ऑब्जेक्ट क्लोन करना jQuery अक्षम / सबमिट बटन सक्षम करें उपयोगकर्ता के रूप में प्रमाणीकृत किए बिना मैं Instagram से उपयोगकर्ता के मीडिया कैसे प्राप्त करूं? MPI_Rank सभी प्रक्रिया के लिए इसी प्रक्रिया संख्या वापस आती है वॉली का उपयोग करके पोस्ट करें और PHP में प्राप्त करें .live () बनाम .बिंद () प्रदर्शन समवर्ती हैशमैप बनाम हैशमैप पहिया प्रारूप से numpy स्थापित नहीं कर सकता बिना छवि के द्विरेखित प्रक्षेप के साथ एक छवि का आकार बदलें

क्या मुझे जावा के साथ कंसोल चौड़ाई मिल सकती है?

क्या कंसोल की चौड़ाई को खोजने का कोई तरीका है जिसमें मेरा जावा प्रोग्राम चल रहा है?

मैं चाहूंगा कि यह संभव हो तो पार मंच हो …

मुझे बफर या विंडो की चौड़ाई बदलने की कोई इच्छा नहीं है, मैं इसकी चौड़ाई को जानना चाहता हूं ताकि मैं पाठ को ठीक से स्वरूपित कर सकूं जो स्क्रीन पर मुद्रित हो रही है।

वेब के समाधान से एकत्रित समाधान "क्या मुझे जावा के साथ कंसोल चौड़ाई मिल सकती है?"

इस समस्या का कोई विश्वसनीय क्रॉस-प्लेटफ़ॉर्म समाधान नहीं है दरअसल, ऐसी स्थितियां हैं जहां असली कंसोल चौड़ाई क्या है, यह जानना संभव नहीं है

उदाहरण के लिए, एक लिनक्स सिस्टम पर आप आमतौर पर LINES और COLUMNS पर्यावरण चर से काल्पनिक टर्मिनल आयामों को पा सकते हैं। जबकि ये चर स्वचालित रूप से अपडेट होते हैं जब आप कुछ "टर्मिनल एमुलेटर" विंडो का आकार बदलते हैं, यह हमेशा मामला नहीं होता है। दरअसल, दूरसंचार प्रोटोकॉल के माध्यम से जुड़ा रिमोट कन्सोल के मामले में, उपयोगकर्ता के खोल में वास्तविक टर्मिनल आयाम प्राप्त करने का कोई तरीका नहीं है।

संपादित करें : बस जोड़ने के लिए कि यदि उपयोगकर्ता एक जावा ऐप लॉन्च करने के बाद लिनक्स पर अपनी एक्सट्रैम के आयाम को बदलता है, तो जावा ऐप को अधिसूचित नहीं किया जाएगा, और यह नहीं देखेगा कि नई आयाम इसकी प्रतिलिपि में प्रतिबिंबित है और COLUMNS पर्यावरण चर!

2 संपादित करें : मेरी गलती, वे bash शेल वैरिएबल हैं, लेकिन डिफ़ॉल्ट रूप से पर्यावरण को निर्यात नहीं किया जाता है। आप अपने जावा अनुप्रयोग को चलाने से पहले export COLUMNS LINES चला कर इसे "ठीक" कर सकते हैं।

दरअसल, Java पुस्तकालय पहले से ही जावा में ऐसा करने के लिए मौजूद है: JLine 2 (स्रोतफोर्स पर एक पुराना संस्करण है, लेकिन गिटहब के लिए यह लिंक नवीनतम लग रहा है।)

यह लिनक्स (टकसाल 14) और विंडोज (मुझे नहीं पता है कि संस्करण क्या है) के तहत जेलेन 2.11 का उपयोग करते हुए मेरे लिए काम किया है:

 terminalWidth = jline.TerminalFactory.get().getWidth(); 

जेलाइन ने मैक पर भी काम करने का वादा किया है

मैंने पाया है कि यह ईक्लिप्स कंसोल (लेकिन यहां तक ​​कि जावा के नेटिव कंसोल ईलेप्से के तहत काम नहीं करता!) के तहत खराब चौड़ाई (जैसे 1 !) देता है, और, दुर्भाग्यवश, साइगविन के तहत। लेकिन मैंने इसे इस कोड के साथ काम किया है जो अनुचित मूल्यों ( < 10 ) के लिए जांच करता है और सिर्फ उन मामलों में 80 का उपयोग करता है।

संपादित करें: ProcessBuilder बारे में @ dave_thompson_085 की टिप्पणी देखें, क्योंकि यह लगभग निश्चित रूप से एक बेहतर तरीका है

एक अन्य उत्तर में एक स्क्रिप्ट में चल रहे tput cols उल्लेख किया गया है इससे पहले कि आप अपना आदेश प्रारंभ करें लेकिन अगर आप जावा चलाने के बाद पहले से ही Runtime.getRuntime().exec() का उपयोग कर Runtime.getRuntime().exec() चाहते हैं, तो आपको लगता है कि tput आपके टर्मिनल से बात नहीं कर सकता, क्योंकि जावा ने stdout और stderr पुनर्निर्देशित किया है। एक नॉट-ऑन-पोर्टेबल समाधान के रूप में, आप जादुई /dev/tty डिवाइस का उपयोग कर सकते हैं, जो वर्तमान प्रक्रिया के टर्मिनल को संदर्भित करता है। इससे आपको कुछ ऐसा चलाने की सुविधा मिलती है:

 Process p = Runtime.getRuntime().exec(new String[] { "bash", "-c", "tput cols 2> /dev/tty" }); // Read the output of this process to get your terminal width 

यह लिनक्स पर मेरे लिए काम करता है, लेकिन मैं इसे हर जगह काम करने की उम्मीद नहीं करता। यह उम्मीद है कि मैक पर काम करेंगे यह निश्चित रूप से विंडोज पर काम नहीं करेगा, हालांकि यह साइगविन के साथ हो सकता है

जावा 6 में एक वर्ग java.io.Console है, लेकिन दुर्भाग्यवश उस कार्यक्षमता की कमी है जो आप पूछ रहे हैं। मानक जावा लाइब्रेरी और शुद्ध, क्रॉस-प्लेटफार्म जावा के साथ कंसोल विंडो चौड़ाई संभव नहीं है।

यहां एक वैकल्पिक जावा कंसोल लाइब्रेरी है जो आपको स्क्रीन आकार प्राप्त करने की अनुमति देती है, लेकिन इसमें विंडोज-विशिष्ट DLL शामिल है। आप स्रोत कोड ले सकते हैं और सी भाग को एक लिनक्स या मैक ओएस एक्स साझा लाइब्रेरी में संकलित कर सकते हैं, ताकि यह उन प्लेटफार्मों पर भी काम करेगा।

मैं इससे पहले इस समस्या पर काम कर रहा हूं मैं कुछ अलग तकनीकों का उपयोग करता हूं हालांकि वास्तव में पार मंच समाधान होना मुश्किल है।

मैंने ऐसा कुछ करने की कोशिश की:

 String os = System.getProperty("os.name").toLowerCase(); //Windows if(os.contains("win")){ System.out.append("Windows Detected"); //set Windows Dos Terminal width 80, height 25 Process p = Runtime.getRuntime().exec("mode 80, 25"); } //Mac if(os.contains("mac")){ System.out.println("Macintosh Detected"); //... I dont know...try Google } //Linux if(os.contains("linux")){ System.out.println("Linux Detected"); 

आप स्ट्रिंग.contains ("export COLUMNS") विधि और user.dir प्रॉपर्टी के साथ हर लिनक्स उपयोगकर्ताओं के होम डायरेक्टरी में .bashrc फ़ाइल में "निर्यात COLUMNS" को जोड़ सकते हैं।

इससे आपको जावा ऐप शुरू होने पर हर बार कॉलम लोड करने की अनुमति मिल जाएगी।

तब मैं इसे एक अस्थायी फ़ाइल में पास कर दूँगा। इस कदर:

 try { ProcessBuilder pb = new ProcessBuilder("bash","-c","echo $COLUMNS >/home/$USER/bin/temp.txt" ); pb.start(); }catch (Exception e) { System.out.println("exception happened - here's what I know: "); e.printStackTrace(); System.exit(-1); } } 

आपके पास एक अन्य विकल्प है स्टार्टअप पर yash Java.jar को एक बाश स्क्रिप्ट के साथ निष्पादित करने के लिए। स्क्रिप्ट के अंदर आप चौड़ाई प्राप्त करने के लिए "टुपुट कॉल्स" का उपयोग कर सकते हैं। फिर उस मान को अपने जावा ऐप को स्ट्रिंग [] एआरजी के रूप में पास करें

इस तरह:

 //#!/bin/bash //#clear the screen clear //#get the console width and height c=$[$(tput cols)] l=$[$(tput lines)] //#pass the columns, lines and an optional third value as String[] args. java -jar ~/bin/Plus.jar $c $l $1 

जावा के साथ ऐसा मुश्किल काम क्यों है? जाहिर है, एक अच्छा एपीआई लिखने के लिए एक अच्छी जगह है। मुझे लगता है हम Apache.commons.exec के साथ-साथ कोशिश कर सकते हैं?

पायथन के लिए एक अच्छा समाधान लगता है: 11.9.3। आउटपुट टर्मिनल के आकार की पूछताछ । मैं अपने सांस को कोर जावा में उपलब्ध होने की प्रतीक्षा नहीं करता, लेकिन आप जेथॉन का उपयोग करने के लिए पायथन की कार्यक्षमता उपलब्ध कर सकते हैं।

मेरे लिए, टर्मिनल विंडो का विचार प्राप्त करने का एकमात्र तरीका (अभी भी सही नहीं है जब विंडो का आकार बदलता है) ऐसी कमान का उपयोग करना है

 ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "mode con"); pb.redirectError(ProcessBuilder.Redirect.INHERIT); 

जब cmd.exe भाग के बिना चलाते हैं, तो यह दिखाता है कि कमांड नहीं मिला। इसके अलावा redirectError ध्यान दें। यदि उपयोग नहीं किया गया तो जावा आउटपुट आकार का उपयोग किया जाएगा, न कि वास्तविक एक। केवल इस संयोजन के साथ ही वास्तविक आकार को प्राप्त करना संभव था।