ร่างกายใด ๆ โปรดบอกฉันว่ารหัสที่ใช้สำหรับหน้าจอที่ชัดเจนใน Java ตัวอย่างเช่นใน C ++
system("CLS");
รหัสใดที่ใช้ใน Java สำหรับหน้าจอที่ชัดเจน?
ขอบคุณ!
ร่างกายใด ๆ โปรดบอกฉันว่ารหัสที่ใช้สำหรับหน้าจอที่ชัดเจนใน Java ตัวอย่างเช่นใน C ++
system("CLS");
รหัสใดที่ใช้ใน Java สำหรับหน้าจอที่ชัดเจน?
ขอบคุณ!
คำตอบ:
เนื่องจากมีหลายคำตอบที่แสดงรหัสที่ไม่ทำงานสำหรับ Windows นี่คือคำชี้แจง:
Runtime.getRuntime().exec("cls");
คำสั่งนี้ใช้ไม่ได้ด้วยเหตุผลสองประการ:
ไม่มีชื่อที่สามารถเรียกใช้งานได้cls.exe
หรือcls.com
ในการติดตั้ง Windows มาตรฐานที่สามารถเรียกใช้ได้ผ่านทางRuntime.exec
เนื่องจากคำสั่งที่รู้จักกันดีcls
นั้นมีอยู่แล้วภายในตัวแปลบรรทัดคำสั่งของ Windows
เมื่อเรียกใช้กระบวนการใหม่ผ่านRuntime.exec
เอาต์พุตมาตรฐานจะถูกเปลี่ยนเส้นทางไปยังไพพ์ซึ่งกระบวนการ Java เริ่มต้นสามารถอ่านได้ แต่เมื่อเอาต์พุตของcls
คำสั่งถูกเปลี่ยนทิศทางมันจะไม่ล้างคอนโซล
เพื่อแก้ปัญหานี้เราต้องเรียกล่ามบรรทัดคำสั่ง ( cmd
) และบอกให้รันคำสั่ง ( /c cls
) ซึ่งอนุญาตให้เรียกใช้คำสั่ง builtin ต่อไปเราจะต้องเชื่อมต่อช่องสัญญาณออกโดยตรงกับช่องสัญญาณออกของกระบวนการ Java ซึ่งเริ่มต้นด้วย Java 7 โดยใช้inheritIO()
:
import java.io.IOException;
public class CLS {
public static void main(String... arg) throws IOException, InterruptedException {
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
}
}
ตอนนี้เมื่อกระบวนการ Java เชื่อมต่อกับคอนโซลนั่นคือเริ่มต้นจากบรรทัดคำสั่งโดยไม่มีการเปลี่ยนเส้นทางออกก็จะล้างคอนโซล
คุณสามารถใช้รหัสต่อไปนี้เพื่อล้างคอนโซลบรรทัดคำสั่ง:
public static void clearScreen() {
System.out.print("\033[H\033[2J");
System.out.flush();
}
สำหรับการอ้างอิงเพิ่มเติมไปที่: http://techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html
นี่คือวิธีที่ฉันจะจัดการกับมัน วิธีนี้จะใช้ได้กับเคส Windows OS และเคส Linux / Unix OS (ซึ่งหมายความว่าใช้งานได้กับ Mac OS X)
public final static void clearConsole()
{
try
{
final String os = System.getProperty("os.name");
if (os.contains("Windows"))
{
Runtime.getRuntime().exec("cls");
}
else
{
Runtime.getRuntime().exec("clear");
}
}
catch (final Exception e)
{
// Handle any exceptions.
}
}
โปรดทราบว่าวิธีนี้โดยทั่วไปจะไม่ล้างคอนโซลหากคุณกำลังทำงานภายใน IDE
java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
cls
ปฏิบัติการใน Windows มันเป็นภายในcmd.exe
คำสั่งของ
วิธีในการรับสิ่งนี้สามารถพิมพ์หลาย ๆ บรรทัด ("\ n") และจำลองหน้าจอที่ชัดเจน ในตอนท้ายที่ชัดเจนที่สุดในยูนิกซ์เชลล์ไม่ได้ลบเนื้อหาก่อนหน้าเพียงเลื่อนขึ้นและถ้าคุณเลื่อนลงสามารถดูเนื้อหาก่อนหน้า
นี่คือตัวอย่างรหัส:
for (int i = 0; i < 50; ++i) System.out.println();
\r\n
ด้วยสายเดี่ยวprintln
เนื่องจากมีความล่าช้าที่เห็นได้ชัดระหว่างการprintln
โทร
clear
คือในตอนหลังเอาต์พุตใหม่จะอยู่ที่ด้านบนของหน้าจอไม่ใช่ด้านล่าง
System.out.println(new String(new char[50]).replace("\0", "\r\n"));
จะทำงานได้เร็วขึ้นและดีขึ้น
System.out.println(System.lineSeparator().repeat(50));
ถ้าคุณต้องการให้ระบบทางเป็นอิสระมากขึ้นในการทำเช่นนี้คุณสามารถใช้JLineห้องสมุดและConsoleReader.clearScreen () การตรวจสอบอย่างรอบคอบว่ามีการสนับสนุน JLine และ ANSIในสภาพแวดล้อมปัจจุบันหรือไม่
บางอย่างเช่นรหัสต่อไปนี้ทำงานให้ฉัน:
import jline.console.ConsoleReader;
public class JLineTest
{
public static void main(String... args)
throws Exception
{
ConsoleReader r = new ConsoleReader();
while (true)
{
r.println("Good morning");
r.flush();
String input = r.readLine("prompt>");
if ("clear".equals(input))
r.clearScreen();
else if ("exit".equals(input))
return;
else
System.out.println("You typed '" + input + "'.");
}
}
}
เมื่อเรียกใช้งานนี้หากคุณพิมพ์ 'clear' ที่พรอมต์มันจะทำการล้างหน้าจอ ตรวจสอบให้แน่ใจว่าคุณเรียกใช้จากเทอร์มินัล / คอนโซลที่เหมาะสมและไม่ได้อยู่ใน Eclipse
สร้างวิธีการในชั้นเรียนของคุณเช่นนี้: [ตาม@Holgerพูดที่นี่ ]
public static void clrscr(){
//Clears Screen in java
try {
if (System.getProperty("os.name").contains("Windows"))
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
else
Runtime.getRuntime().exec("clear");
} catch (IOException | InterruptedException ex) {}
}
อย่างน้อยก็ใช้งานได้กับ windows ฉันยังไม่ได้ตรวจสอบสำหรับ Linux หากใครตรวจสอบหา Linux โปรดแจ้งให้เราทราบว่ามันใช้งานได้ (หรือไม่)
ในฐานะที่เป็นวิธีการอื่นคือการเขียนรหัสนี้ในclrscr()
:
for(int i = 0; i < 80*300; i++) // Default Height of cmd is 300 and Default width is 80
System.out.print("\b"); // Prints a backspace
ฉันจะไม่แนะนำให้คุณใช้วิธีนี้
Runtime.getRuntime (). exec (cls) ไม่ทำงานบนแล็ปท็อป XP ของฉัน สิ่งนี้ทำ -
for(int clear = 0; clear < 1000; clear++)
{
System.out.println("\b") ;
}
หวังว่านี่จะเป็นประโยชน์
ลองทำสิ่งต่อไปนี้:
System.out.print("\033\143");
สิ่งนี้จะทำงานได้ดีในสภาพแวดล้อม Linux
วิธีนี้จะใช้งานได้หากคุณทำสิ่งนี้ใน Bluej หรือซอฟต์แวร์อื่นที่คล้ายคลึงกัน
System.out.print('\u000C');
คุณต้องใช้อักขระควบคุมเป็นเครื่องหมายแบ็กสแลช (\ b) และแคร่กลับ (\ r) มันถูกปิดใช้งานโดยค่าเริ่มต้น แต่มุมมองคอนโซลสามารถตีความการควบคุมเหล่านี้ได้
Windows> การกำหนดค่าตามความชอบและRun / Debug> คอนโซลและเลือกตีความอักขระควบคุม ASCIIเพื่อเปิดใช้งาน
หลังจากการกำหนดค่าเหล่านี้คุณสามารถจัดการคอนโซลด้วยอักขระควบคุมเช่น:
แท็บ \ t -
\ b - backspace (ขั้นตอนย้อนหลังในข้อความหรือการลบอักขระเดียว)
\ n - บรรทัดใหม่
\ r - รับคืนรถ ()
\ f - ฟีดฟอร์ม
ข้อมูลเพิ่มเติมได้ที่: https://www.eclipse.org/eclipse/news/4.14/platform.php
คุณต้องใช้ JNI
ก่อนอื่นให้ใช้สร้าง. dll โดยใช้ visual studio, ระบบเรียก ("cls") หลังจากนั้นใช้ JNI เพื่อใช้ DDL นี้
ฉันพบบทความที่ดี:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=5170&lngWId=2