powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Очень нужна помощь
31 сообщений из 31, показаны все 2 страниц
Очень нужна помощь
    #33293690
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче задали такую задачу:
Нужно написать программу,которая будет запускать линуксовую команду(не помню какую, но суть пока не в этом) на сервере (эта команда показывает какие айпи адреса есть,в какие vlan-ы они входят, дату последнего сеанса связи и т.д). Вообщем результатом выполнения команды есть текстовый файл с вышеперечисленными данными, моя прога должна будет выкачать этот файл и красиво выдать его в JTable.
Спасибо всем,кто откликнется.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293717
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно на файл глянуть? На вскидку StringTokenzier должен вам помочь.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293739
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в чем, собственно, проблема? В том, как команду запустить, как файл найти/считать или как его в табличку по ячейкам распихать?
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293777
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗашедшийТак в чем, собственно, проблема? В том, как команду запустить, как файл найти/считать или как его в табличку по ячейкам распихать?
как запустить удаленно команду, как обработать файл(файл выглядит как обычная таблица, название колонок,а под ними содержаниями,) и разпихать потом по ячейкам
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293819
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторкак запустить удаленно команду
вот это основная проблема, как мне кажется, все остальное детский сад.
- можно создать сервер(будет крутится на линухе) и клиент
- если без сервера, то можно попробавать локально запускать телнет, и передавать ему команды, затем читать телнетовский выходной поток, думаю это реально.
- поставить на серваке Tomcat и сделать веб-приложение, это думаю саммый оптимальный вариант.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293833
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для чтения построчно используй класс FileReader метод readLine. Получишь строку, разпарсь её StringTokenzier'ом на токены заполняя массив стрингов(String[][]). Моделью таблици отображай полученый массив (String[][]) и все. Я б так сделал.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293868
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если локальный файл...
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293894
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
peter6636 ЗашедшийТак в чем, собственно, проблема? В том, как команду запустить, как файл найти/считать или как его в табличку по ячейкам распихать?
как запустить удаленно команду, как обработать файл(файл выглядит как обычная таблица, название колонок,а под ними содержаниями,) и разпихать потом по ячейкам
Как запустить команду удаленно - сейчас сказать не могу, а искать некогда, а вот с обработкой файла все довольно просто. У тебя, видимо, всегда во всех колонках присутствуют значения, так что разбирать можно с помощью стандартного StringTokenizer. Он по умолчанию как раз разбирает строки значений, разделенных пробелами.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293908
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНДля чтения построчно используй класс FileReader метод readLine. Получишь строку, разпарсь её StringTokenzier'ом на токены заполняя массив стрингов(String[][]). Моделью таблици отображай полученый массив (String[][]) и все. Я б так сделал.
Вот как раз насчет двуразмерного массива не факт, может, лучше бы сделать лист из одномерных массивов (записей, разбитых на колонки), потому что исходно длина файла и количество строк в нем неизвестно.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293947
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда вектором можно хранить.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293950
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так файло разбираться должно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
List lines =  new  ArrayList();
...

function  void  parseLine(String line) {
    StringTokenizer st =  new  StringTokenizer(line);
    String[] record =  new  Strring[st.countTokens];
     int  i =  0 ;
     while  (st.hasMoreTokens()) {
        record[i++] = st.nextToken();
    }
    lines.add(record);
}

function  void  parseFile(String fileName)  throws  IOException {
    BufferedReader reader =  new  BufferedReader( new  FileReader(fileName));
    String line = reader.readLine();
     while  (line !=  null ) {
        parseLine(line);
        line = reader.readLine();
    }
    reader.close();
}
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33293954
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоННу тогда вектором можно хранить.Можно, но лучше листом. Как Сан рекомендует. Слово "вектор" в Яве вообще лучше забыть :)
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294146
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зашедший ТимоННу тогда вектором можно хранить.Можно, но лучше листом. Как Сан рекомендует. Слово "вектор" в Яве вообще лучше забыть :)
сцылку можно?
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294208
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen
- если без сервера, то можно попробавать локально запускать телнет, и передавать ему команды, затем читать телнетовский выходной поток, думаю это реально.

вот это мне больше всего приглянулось,как мне с телнетом работать.
Какими методами пердавать в него команды, какими читать выходной поток?
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294289
botpride
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timm Зашедший ТимоННу тогда вектором можно хранить.Можно, но лучше листом. Как Сан рекомендует. Слово "вектор" в Яве вообще лучше забыть :)
сцылку можно?

По-моему, эту утку про "обсолетность" вектора придумали обкурившиеся ребята из JetBrains. У них даже в code inspection оно радостно ругается на вектора (рекомендуя, естественно, заменять их на ArrayList).
Но: ArrayList отнюдь не быстрее - это раз. Задать инкремент в конструкторе нельзя - это два. И, наконец, нету банального урезания - разве что циклическим remove.
Я как-то просто ради интереса сбекапил код готового проекта, а потом тупо поменял Vector на ArrayList. После небольшой правки напильником все ожило, а вот работало несколько медленней оригинала - видимо, именно за счет невозможности ручками инкременты прописать.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294356
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm Зашедший ТимоННу тогда вектором можно хранить.Можно, но лучше листом. Как Сан рекомендует. Слово "вектор" в Яве вообще лучше забыть :)
сцылку можно?
Во второй книге сановской серии "Core Java" в разделе Collections описано, почему. Дело в том, что Vector имеет синхронизированные методы, а в большинстве случаев используется в одном потоке. Поэтому сильно тормозит общее быстродействие циклов. Для унификации рекомендуется использовать List во всех случаях, для многопоточных юзать что-то вроде Collections.synchronizedList(new ArrayList()).
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294377
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посоветуйте бесплатный джава вреймворк для работы с тэлнэт
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294385
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зашедший Timm Зашедший ТимоННу тогда вектором можно хранить.Можно, но лучше листом. Как Сан рекомендует. Слово "вектор" в Яве вообще лучше забыть :)
сцылку можно?
Во второй книге сановской серии "Core Java" в разделе Collections описано, почему. Дело в том, что Vector имеет синхронизированные методы, а в большинстве случаев используется в одном потоке. Поэтому сильно тормозит общее быстродействие циклов. Для унификации рекомендуется использовать List во всех случаях, для многопоточных юзать что-то вроде Collections.synchronizedList(new ArrayList()).
кхм...
это не объяснение.
в идее всю лабуду по code inspection можно настроить как твоей душе угодно, за что можно сказать спасибо JetBrains;
то что у Vector'а синхронизированы методы - об этом написано везде, начиная с API, и если кто то не знает - его проблемы.

меня интересует фраза "Как Сан рекомендует".
?
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294393
botprideПо-моему, эту утку про "обсолетность" вектора придумали обкурившиеся ребята из JetBrains.

Сходи на Java.Sun.Com, почитай откуда ноги растут.

Методы Vector синхронизированы и поэтому, в теории, он менее продуктивен.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294405
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начали за здравие, а закончили за упокой.Мужики, вопрос не про колекции был, а про using telnet
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294445
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
peter6636Начали за здравие, а закончили за упокой.Мужики, вопрос не про колекции был, а про using telnetда чего ты пристал со своим мелочным телнетом. :-)
Тут такие вещи обсуждаются!!! ;-)
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294459
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, например, с javaworld сцылка , по итогам JavaOne 98 года еще. Цитата: "Although they are not actually deprecated, the Enumeration interface, arrays, Vector class, and Dictionary class now are obsolete. (Deprecation would be impossible. There is too much code that uses them and too many changes would be required to that code to use the new APIs.)"
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294462
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот от самого сана рекомендация в девелоперз тренингах:
тынц , тоже цитата: "A Vector is an historical collection class that acts like a growable array, but can store heterogeneous data elements. With the Java 2 SDK, version 2, the Vector class has been retrofitted into the Collections Framework hierarchy to implement the List interface. However, if you are using the new framework, you should use ArrayList, instead."
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294651
Ekshibarov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что если выполнить команду удаленно по SSH? Вот вырезки, когда то писал для работы по SSH:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
 public   class  mCashSSHSession {

	 private  SSHSessionWriter writer;
	 private  SshClient ssh;
	 private  SshSession session;

 public   boolean  startSession(String host, String user, String password)  throws  SshException, IOException, ChannelOpenException{
		
        SshConnector con = SshConnector.getInstance();

        // Verify server host keys using the users known_hosts file
        con.setKnownHosts( new  ConsoleKnownHostsKeyVerification());

        /**
         * Connect to the host
         */
         this .ssh = con.connect( new  SocketTransport(host,  22 ), user);
		
        com.maverick.ssh.PasswordAuthentication pwd =  new  com.maverick.ssh.PasswordAuthentication();
		
        pwd.setPassword(password);
        
         if (!( this .ssh.authenticate(pwd)==SshAuthentication.COMPLETE &&  this .ssh.isConnected())){
        	
        		System.out.println("Authentication Error");
        		 return  false;  
      }
        
         if (! this .ssh.isAuthenticated()){

        		System.out.println("Authentication Error");
        		 return  false;       	
      }
  
         this .session =  this .ssh.openSessionChannel();

        // Use the newly added PseudoTerminalModes class to
        // turn off echo on the remote shell
        PseudoTerminalModes pty =  new  PseudoTerminalModes( this .ssh);
        pty.setTerminalMode(PseudoTerminalModes.ECHO, false);
       
         this .session.requestPseudoTerminal("vt100",  80 ,  24 ,  0 ,  0 , pty);
         this .session.startShell();
  
         this .writer =  new  SSHSessionWriter( this .session);
         this .writer.start();
          return  true;
	}
	
	 public   void  closeSession(){
		
		 this .writer.interrupt();
		 this .session.close();
		 this .ssh.disconnect();
		
	}
	
	 public   void  executeCommand(String command){
		
		 try  {
			 this .session.getOutputStream().write((command+"\n").getBytes());
		}  catch  (SshIOException e) {
			System.out.println("SSH IO Error : "+e.getMessage());
		}  catch  (IOException e) {
			System.out.println("IO Error : "+e.getMessage());
		}		
	}

 class  SSHSessionWriter  extends  Thread{
	
	 private  SshSession session;
	
	 public  SSHSessionWriter(SshSession session){
		
		 this .session = session;
	}
	 public   void  run(){
		
		 byte [] readBytes =  new   byte [ 4096 ];
		 int  readed;	
		 try  {
			 while ((! this .isInterrupted())&&((readed = session.getInputStream().read(readBytes, 0 , 4096 )) > - 1 )){
				System.out.println( this .lastResponse); //Собственно вот здесь и возвращается результат команд
			}
			System.out.println("Exit");
		}  catch  (SshIOException e) {
			System.out.println("SSH Error : "+e.getMessage());
		}  catch  (IOException e) {
			System.out.println("IO Error : "+e.getMessage());
		}		
	}	
}


Для работы по SSH использовал библиотеку Maverick, скачать можно:
Вот здесь
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33294844
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точно не помню,давно это было,вроде в *NIX есть сервис по удаленному запуску команд, который сидит не то на 512 или 511 порту. Делешь сокет на этот порт,посылаешь шеловскую команду и вычитываешь,что она выдает.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33295776
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как работать с командной строкой я разобрался, а вот как мне работать с telnet через jTextArea не могу понять.Короче мне нужно сделать все через GUI.
Пока что так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
 import  com.jscape.inet.telnet.*;
 import  java.io.*;

 public   class  Telnet_Peter  extends  TelnetAdapter {

         private  Telnet telnet =  null ;
         private  OutputStream output =  null ;
         private   static  BufferedReader reader =  null ;
         private   boolean  connected = false;
         public  TelnetExample(String hostname)  throws  IOException, TelnetException {
          try {
                String input =  null ;
                telnet =  new  Telnet(hostname);
                telnet.addTelnetListener( this );
                telnet.connect();
                connected = true;
                output = telnet.getOutputStream();
                while  ((input = reader.readLine()) !=  null ) {
                         if  (connected) {
                                ((TelnetOutputStream) output).println(input);
                        }  else  {
                                 break ;
                        }
                }
         } catch (Exception e){
           System.out.println("exc="+e.toString());
         }
        }

         public   void  connected(TelnetConnectedEvent event) {
                System.out.println("Connected");
        }

         public   void  disconnected(TelnetDisconnectedEvent event) {
                connected = false;
                System.out.print("Разсоединение.  Нажмите Enter для выхода.");
        }

         public   void  doOption(DoOptionEvent event) {
                telnet.sendWontOption(event.getOption());
        }

         public   void  willOption(WillOptionEvent event) {
                telnet.sendDontOption(event.getOption());
        }

         public   void  dataReceived(TelnetDataReceivedEvent event) {
                System.out.print(event.getData());
        }

         public   static   void  main(String[] args) {
                 try  {
                    reader =  new  BufferedReader( new  InputStreamReader(System.in));
                        System.out.print("Введите имя хоста: ");
                        String hostname = reader.readLine();
                        Telnet_Peter example =  new  Telnet_Peter(hostname);
                }  catch  (Exception e) {
                        e.printStackTrace(System.out);
                }
        }
}
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33295845
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
System.out.print(" Разсоединение. Нажмите Enter для выхода.");

:))
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33295864
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen System.out.print(" Разсоединение. Нажмите Enter для выхода.");

:))
да хер с ним,как сделать то,что я описал выше
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33296029
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
peter6636 wessen System.out.print(" Разсоединение. Нажмите Enter для выхода.");

:))
да хер с ним,как сделать то,что я описал выше

есть форма, на ней текстовое поле и кнобка, вводишь в текстовое поле команду, жмешь кнобку, в обработчике событий считываешь значение поля и передаешь это значение в свой класс Telnet-peter.
Какие ешо неясности? :)
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33296091
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗашедшийА вот от самого сана рекомендация в девелоперз тренингах:
тынц , тоже цитата: "A Vector is an historical collection class that acts like a growable array, but can store heterogeneous data elements. With the Java 2 SDK, version 2, the Vector class has been retrofitted into the Collections Framework hierarchy to implement the List interface. However, if you are using the new framework, you should use ArrayList, instead."

should Lingvo :
употребляется для выражения морального долга /* */ или совета и имеет в этом случае значение "должен", "следует", "следовало бы"


из первой ссылкиThe standard implementations of the Collections API interfaces (HashMap, TreeMap and the like) are defined with no built-in synchronization mechanisms. That way, single-thread applications do not pay the performance cost of unnecessary synchronization, and multithreaded applications that are already using synchronization do not incur the performance penalty that results from multiple synchronization.

For simple multithreading applications, an application can use the synchronized "wrapper" classes. For example, instead of creating a object using HashMap(), the app could use SynchronizedHashMap(). That implementation "wraps" a HashMap inside of an object which is synchronized.

Developers of multithreading will note that the wrapper classes provide relatively "unsophisticated" synchronization. It allows only one thread at a time to access the HashMap, even though multiple threads could be allowed to do so (if they were using different keys). The "wrapper" implementation also requires an extra method call. To achieve maximum parallelism or maximum performance, therefore, you would subclass one of the existing implementations and add synchronization mechanisms within them.

Whether you use the simple synchronized wrappers or provide your own more sophisticated synchronization mechanisms, the bottom line is that now you can choose when to incur the cost of synchronization, instead of having it foisted off on you. To developers obsessed with performance, that will come as great news.
...
Рейтинг: 0 / 0
Очень нужна помощь
    #33296122
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen peter6636 wessen System.out.print(" Разсоединение. Нажмите Enter для выхода.");

:))
да хер с ним,как сделать то,что я описал выше

есть форма, на ней текстовое поле и кнобка, вводишь в текстовое поле команду, жмешь кнобку, в обработчике событий считываешь значение поля и передаешь это значение в свой класс Telnet-peter.
Какие ешо неясности? :)
Ну что я совсем уже,так и есть у меня, но я не вижу в jTextArea приглашения для ввода логина и пароля, делаю таким макаром:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
 package  ptsist;

 import  com.jscape.inet.telnet.*;
 import  java.io.*;

 public   class  Telnet_Peter  extends  TelnetAdapter {

         private  Telnet telnet =  null ;
         private  OutputStream output =  null ;
         private   static  BufferedReader reader =  null ;
         private   boolean  connected = false;
         private  String host;
         private  Glavnoe ob;

         public  Telnet_Peter(String hostname,Glavnoe g)  throws  IOException {
           try  {
            host=hostname;
            ob=g;
            reader =  new  BufferedReader( new  InputStreamReader(System.in));
                     }  catch  (Exception e) {
                             e.printStackTrace(System.out);
                }
          try {
                String input =  null ;
 
                telnet =  new  Telnet(hostname);

                telnet.addTelnetListener( this );

                telnet.connect();
                connected = true;

                output = telnet.getOutputStream();

                 while  ((input = reader.readLine()) !=  null ) {
                         if  (connected) {
                                ((TelnetOutputStream) output).println(input);
                                ob.jTextArea1.setText(input);
                        }  else  {
                                 break ;
                        }
                }
         } catch (Exception e){
           System.out.println("exc="+e.toString());
         }
        }


         public   void  connected(TelnetConnectedEvent event) {
          ob.statusBar.setText("Соединение установлено");
               }

         public   void  disconnected(TelnetDisconnectedEvent event) {
                connected = false;
                ob.jTextArea1.setText("нажми энтэр");
        }

         public   void  doOption(DoOptionEvent event) {
                telnet.sendWontOption(event.getOption());
        }

         public   void  willOption(WillOptionEvent event) {
                telnet.sendDontOption(event.getOption());
        }

         public   void  dataReceived(TelnetDataReceivedEvent event) {
          ob.jTextArea1.setText(event.getData());
        }
}
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Очень нужна помощь
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]