diff --git a/.gitignore b/.gitignore index bdd4439..e4316fc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.pdf /out/ /Homeworks/ +*.zip diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..b08e5aa --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/libraries/sqlite_jdbc_3_21_0.xml b/.idea/libraries/sqlite_jdbc_3_21_0.xml new file mode 100644 index 0000000..7ab8ea7 --- /dev/null +++ b/.idea/libraries/sqlite_jdbc_3_21_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Java2.iml b/Java2.iml index c90834f..050079b 100644 --- a/Java2.iml +++ b/Java2.iml @@ -7,5 +7,6 @@ + \ No newline at end of file diff --git a/JavaFX_chat.db b/JavaFX_chat.db new file mode 100644 index 0000000..4c5da40 Binary files /dev/null and b/JavaFX_chat.db differ diff --git a/src/ru/geekbrains/java2/lesson_04/Classwork/MainClass.java b/src/ru/geekbrains/java2/lesson_04/Classwork/MainClass.java new file mode 100644 index 0000000..61ca2cb --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_04/Classwork/MainClass.java @@ -0,0 +1,7 @@ +package ru.geekbrains.java2.lesson_04.Classwork; + +public class MainClass { + public static void main(String[] args) { + MyWindow window = new MyWindow(); + } +} diff --git a/src/ru/geekbrains/java2/lesson_04/Classwork/MyHintTextfield.java b/src/ru/geekbrains/java2/lesson_04/Classwork/MyHintTextfield.java new file mode 100644 index 0000000..158a1b7 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_04/Classwork/MyHintTextfield.java @@ -0,0 +1,21 @@ +package ru.geekbrains.java2.lesson_04.Classwork; + +import javax.swing.*; +import java.awt.*; + +public class MyHintTextfield extends JTextField { + private String hint; + + public MyHintTextfield(int columns, String hint) { + super(columns); + this.hint = hint; + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + if(getText().isEmpty() && !hasFocus()){ + g.drawString(hint, 2, 26); + } + } +} diff --git a/src/ru/geekbrains/java2/lesson_04/Classwork/MyWindow.java b/src/ru/geekbrains/java2/lesson_04/Classwork/MyWindow.java new file mode 100644 index 0000000..fd02b1a --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_04/Classwork/MyWindow.java @@ -0,0 +1,77 @@ +package ru.geekbrains.java2.lesson_04.Classwork; +// video 2:17 +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; + +public class MyWindow extends JFrame { + private JTextField textField; + private JTextArea textArea; + + public MyWindow() { + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + setTitle("My application"); + setBounds(750, 250, 400, 445); + + Font arial18 = new Font("Arial", Font.BOLD, 18); + + JButton button1 = new JButton("Button 1"); + JButton button2 = new JButton("Button 2"); + textField = new MyHintTextfield(32, "Введите сообщение"); + textField.setFont(arial18); + textField.setPreferredSize(new Dimension(250, 40)); + JPanel upPanel = new JPanel(new BorderLayout()); + + upPanel.add(button1, BorderLayout.WEST); + upPanel.add(textField, BorderLayout.CENTER); + upPanel.add(button2, BorderLayout.EAST); + add(upPanel, BorderLayout.NORTH); + + JList membersList = new JList<>(new DefaultListModel<>()); + add(membersList, BorderLayout.EAST); + membersList.setPreferredSize(new Dimension(100, 1)); + ((DefaultListModel)membersList.getModel()).addElement("member1"); + ((DefaultListModel)membersList.getModel()).addElement("abrakadabra"); + ((DefaultListModel)membersList.getModel()).addElement("noNickName"); + + textArea = new JTextArea(20, 32); + textArea.setLineWrap(true); + textArea.setEditable(false); + textArea.setFont(arial18); + JScrollPane scrollPane = new JScrollPane(textArea); + add(scrollPane, BorderLayout.CENTER); + + button1.addActionListener(e -> JOptionPane.showMessageDialog(null, + "Перегрев процессора", "Внимание!!!", JOptionPane.WARNING_MESSAGE)); + button2.addActionListener(e -> sendMsg()); + textField.addActionListener(e -> sendMsg()); + + button1.addMouseMotionListener(new MouseMotionAdapter() { + @Override + public void mouseDragged(MouseEvent e) { + super.mouseDragged(e); + button1.setBackground(new Color(0xAC2521)); + } + + @Override + public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + button1.setBackground(new Color(0x0AAC1A)); + } + }); + + setVisible(true); + } + + public void sendMsg() { + String meggage = textField.getText(); + if (!meggage.isEmpty()) { + textArea.append(textField.getText() + "\n"); + textField.setText(""); + } + textField.grabFocus(); + } +} diff --git a/src/ru/geekbrains/java2/lesson_04/GeekChatWindow.java b/src/ru/geekbrains/java2/lesson_04/GeekChatWindow.java new file mode 100644 index 0000000..bff321d --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_04/GeekChatWindow.java @@ -0,0 +1,99 @@ +package ru.geekbrains.java2.lesson_04; + +import javax.swing.*; +import javax.swing.border.EmptyBorder; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class GeekChatWindow extends JFrame { + private HintTextField nicknameField; + private HintTextField messageField; + private JTextArea chatArea; + private JList membersList; + + public GeekChatWindow(String title) { + setTitle(title); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + setBounds(750, 150, 500, 800); + Font arial18 = new Font("Arial", Font.PLAIN, 18); + + JLabel nickLable = new JLabel("Никнейм: "); + nickLable.setFont(arial18); + + nicknameField = new HintTextField(28, "Введите ваш ник"); + nicknameField.setFont(arial18); + nicknameField.setPreferredSize(new Dimension(1, 32)); + + JPanel nickPanel = new JPanel(new BorderLayout()); + nickPanel.setBorder(new EmptyBorder(3, 5, 2, 5)); + nickPanel.add(nickLable, BorderLayout.WEST); + nickPanel.add(nicknameField, BorderLayout.CENTER); + add(nickPanel, BorderLayout.NORTH); + + messageField = new HintTextField(30, "Введите сообщение"); + messageField.setFont(arial18); + messageField.setPreferredSize(new Dimension(1, 32)); + messageField.addActionListener(new SendMessage()); + + JButton sendButton = new JButton("Отправить"); + sendButton.setFont(arial18); + sendButton.addActionListener(new SendMessage()); + + JPanel messagePanel = new JPanel(new BorderLayout()); + messagePanel.setBorder(new EmptyBorder(2, 5, 2, 5)); + messagePanel.add(messageField, BorderLayout.CENTER); + messagePanel.add(sendButton, BorderLayout.EAST); + add(messagePanel, BorderLayout.SOUTH); + + chatArea = new JTextArea(20, 30); + chatArea.setFont(arial18); + chatArea.setLineWrap(true); + chatArea.setWrapStyleWord(true); + chatArea.setEditable(false); + chatArea.append("member1: добрый вечер всем, а в чём суть Дз?\n" + + "там же есть готовый код уже, на уроке проходили, просто самому разобраться и переписать?\n\n" + + "abrakadabra : Добрый. Именно так\n\n" + + "noNickName: Вообще по заданию ДЗ окно чата выглядеть должно немного иначе.\n\n"); + + JScrollPane chatScroller = new JScrollPane(chatArea); + add(chatScroller, BorderLayout.CENTER); + + membersList = new JList<>(new DefaultListModel<>()); + membersList.setPreferredSize(new Dimension(100, 1)); + ((DefaultListModel) membersList.getModel()).addElement("member1"); + ((DefaultListModel) membersList.getModel()).addElement("abrakadabra"); + ((DefaultListModel) membersList.getModel()).addElement("noNickName"); + + JLabel membersLable = new JLabel("Участники:"); + + JPanel membersPanel = new JPanel(new BorderLayout()); + membersPanel.setBorder(new EmptyBorder(4, 4, 4, 4)); + membersPanel.add(membersLable, BorderLayout.NORTH); + membersPanel.add(membersList, BorderLayout.CENTER); + + JScrollPane memberScroller = new JScrollPane(membersPanel); + add(memberScroller, BorderLayout.EAST); + + + setVisible(true); + } + + class SendMessage implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + if (!messageField.getText().isEmpty()) { + String nickname = nicknameField.getText(); + + if (nickname.isEmpty()) nickname = "unknown"; + else if (!((DefaultListModel) membersList.getModel()).contains(nicknameField.getText())) + ((DefaultListModel) membersList.getModel()).addElement(nicknameField.getText()); + + chatArea.append(nickname + ": " + messageField.getText() + "\n\n"); + messageField.setText(""); + messageField.grabFocus(); + } + } + } +} diff --git a/src/ru/geekbrains/java2/lesson_04/HintTextField.java b/src/ru/geekbrains/java2/lesson_04/HintTextField.java new file mode 100644 index 0000000..f2fd7c1 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_04/HintTextField.java @@ -0,0 +1,23 @@ +package ru.geekbrains.java2.lesson_04; + +import javax.swing.*; +import java.awt.*; + +public class HintTextField extends JTextField { + private String hint; + + public HintTextField(int columns, String hint) { + super(30); + this.hint = hint; + + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + if (getText().isEmpty()){ + g.setColor(new Color(0x737EFF)); + g.drawString(hint, 2, 22); + } + } +} diff --git a/src/ru/geekbrains/java2/lesson_04/Homework.java b/src/ru/geekbrains/java2/lesson_04/Homework.java new file mode 100644 index 0000000..d15c949 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_04/Homework.java @@ -0,0 +1,11 @@ +package ru.geekbrains.java2.lesson_04; + +import ru.geekbrains.java2.lesson_04.Classwork.MyWindow; + +public class Homework { + public static final String version = "v 0.0.0.1"; + + public static void main(String[] args) { + new GeekChatWindow("Geek Chat " + version); + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/Classwork/Counter.java b/src/ru/geekbrains/java2/lesson_05/Classwork/Counter.java new file mode 100644 index 0000000..2f86959 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/Classwork/Counter.java @@ -0,0 +1,21 @@ +package ru.geekbrains.java2.lesson_05.Classwork; + +public class Counter { + private int c; + + public Counter() { + c = 0; + } + + public int value() { + return c; + } + + public synchronized void inc() { + c++; + } + + public synchronized void dec(){ + c--; + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/Classwork/Example_SB_1.java b/src/ru/geekbrains/java2/lesson_05/Classwork/Example_SB_1.java new file mode 100644 index 0000000..7c878ff --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/Classwork/Example_SB_1.java @@ -0,0 +1,36 @@ +package ru.geekbrains.java2.lesson_05.Classwork; + +public class Example_SB_1 { + public static void main(String[] args) { + Example_SB_1 e1 = new Example_SB_1(); + System.out.println("Start"); + new Thread(() -> e1.method1()).start(); + new Thread(() -> e1.method2()).start(); + } + + public synchronized void method1() { + System.out.println("M1"); + for (int i = 0; i < 10; i++) { + System.out.println(i); + try { + Thread.sleep(101); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + System.out.println("M2"); + } + + public synchronized void method2() { + System.out.println("M1"); + for (int i = 0; i < 10; i++) { + System.out.println(i); + try { + Thread.sleep(102); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + System.out.println("M2"); + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/Classwork/Example_SB_2.java b/src/ru/geekbrains/java2/lesson_05/Classwork/Example_SB_2.java new file mode 100644 index 0000000..5babb64 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/Classwork/Example_SB_2.java @@ -0,0 +1,36 @@ +package ru.geekbrains.java2.lesson_05.Classwork; + +public class Example_SB_2 { + private Object lock1 = new Object (); + public static void main ( String [] args ) { + Example_SB_2 e2 = new Example_SB_2 (); + System . out . println ( "Start" ); + new Thread (() -> e2 . method1 ()). start (); + new Thread (() -> e2 . method1 ()). start (); + } + public void method1 () { + System . out . println ( "Block-1 begin" ); + for ( int i = 100 ; i < 103 ; i ++) { + System . out . println ( i ); + try { + Thread . sleep ( 100 ); + } catch ( InterruptedException e ) { + e . printStackTrace (); + } + } + System . out . println ( "Block-1 end" ); + synchronized (lock1){ + System.out.println("Synch block begin"); + for (int i = 0; i < 10; i++) { + System.out.println(i); + try { + Thread.sleep(103); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + System.out.println("Synch block end"); + } + System . out . println ( "M2" ); + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/Classwork/Example_SB_3.java b/src/ru/geekbrains/java2/lesson_05/Classwork/Example_SB_3.java new file mode 100644 index 0000000..2874e58 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/Classwork/Example_SB_3.java @@ -0,0 +1,20 @@ +package ru.geekbrains.java2.lesson_05.Classwork; + +public class Example_SB_3 { + public static void main(String[] args) { + System.out.println("Start"); + new Thread(() -> method()).start(); + new Thread(() -> method()).start(); + } + + public synchronized static void method() { // синхронизация по классу + for (int i = 0; i < 10; i++) { + System.out.println(i + " " + Thread.currentThread().getName()); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/Classwork/MainClass.java b/src/ru/geekbrains/java2/lesson_05/Classwork/MainClass.java new file mode 100644 index 0000000..1ab3bd9 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/Classwork/MainClass.java @@ -0,0 +1,109 @@ +package ru.geekbrains.java2.lesson_05.Classwork; + +public class MainClass { + public static void main(String[] args) { + /*System.out.println(Thread.currentThread().getName()); + + MyThread myT1 = new MyThread(); + MyThread myT2 = new MyThread(); + myT1.start(); + myT2.start(); + + Thread myR3 = new Thread(new MyRunnable()); + Thread myR4 = new Thread(new MyRunnable()); + myR3.start(); + myR4.start(); + try { + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("end");*/ + + /* Thread th1 = new Thread(new Runnable() { + @Override + public void run() { + for (int i = 1; i < 6; i++) { + System.out.println(i); + } + } + }); + + Thread th2 = new Thread(new Runnable() { + @Override + public void run() { + for (int i = 11; i < 16; i++) { + System.out.println(i); + } + } + }); + + th1.start(); + th2.start(); + + try { + th1.join(); + th2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("end");*/ + + /* Thread th = new Thread(new Runnable() { + @Override + public void run() { + int time = 0; + while (true){ + time++; + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println(time); + } + } + }); + th.setDaemon(true); + th.start(); + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("end");*/ + + Counter counter = new Counter(); + + Thread th1 = new Thread(new Runnable() { + @Override + public void run() { + for (int i = 0; i < 100; i++) { + counter.inc(); + } + } + }); + + Thread th2 = new Thread(new Runnable() { + @Override + public void run() { + for (int i = 0; i < 100; i++) { + counter.dec(); + } + } + }); + + th1.start(); + th2.start(); + + try { + th1.join(); + th2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + System.out.println(counter.value()); + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/Classwork/MyRunnable.java b/src/ru/geekbrains/java2/lesson_05/Classwork/MyRunnable.java new file mode 100644 index 0000000..c9bb966 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/Classwork/MyRunnable.java @@ -0,0 +1,11 @@ +package ru.geekbrains.java2.lesson_05.Classwork; + +public class MyRunnable implements Runnable { + @Override + public void run() { + for (int i = 0; i < 10; i++) { + System.out.println(i + " " + Thread.currentThread().getName()); + } + + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/Classwork/MyThread.java b/src/ru/geekbrains/java2/lesson_05/Classwork/MyThread.java new file mode 100644 index 0000000..2c8418b --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/Classwork/MyThread.java @@ -0,0 +1,10 @@ +package ru.geekbrains.java2.lesson_05.Classwork; + +public class MyThread extends Thread { + @Override + public void run() { + for (int i = 0; i < 10; i++) { + System.out.println(i + " " + Thread.currentThread().getName()); + } + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/Homework.java b/src/ru/geekbrains/java2/lesson_05/Homework.java new file mode 100644 index 0000000..17b943a --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/Homework.java @@ -0,0 +1,30 @@ +package ru.geekbrains.java2.lesson_05; + +import java.util.Arrays; + +public class Homework { + private static final int SIZE = 10000000; + + public static void main(String[] args) { + long startTime; + + float[] arr = new float[SIZE]; + Arrays.fill(arr, 1f); + + startTime = System.currentTimeMillis(); + MonothreadedCalculate.calc(arr.clone()); + System.out.println("Вычисление в однопоточном методе заняло " + + (float) (System.currentTimeMillis() - startTime) / 1000 + " сек."); + + startTime = System.currentTimeMillis(); + TwothreadedCalculate.calc(arr.clone()); + System.out.println("Вычисление в двухпоточном методе заняло " + + (float) (System.currentTimeMillis() - startTime) / 1000 + " сек."); + + startTime = System.currentTimeMillis(); + MultithreadedCalculate.calc(arr.clone()); + System.out.println("Вычисление в многопоточном методе заняло " + + (float) (System.currentTimeMillis() - startTime) / 1000 + " сек."); + } +} + diff --git a/src/ru/geekbrains/java2/lesson_05/MonothreadedCalculate.java b/src/ru/geekbrains/java2/lesson_05/MonothreadedCalculate.java new file mode 100644 index 0000000..50c02ff --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/MonothreadedCalculate.java @@ -0,0 +1,9 @@ +package ru.geekbrains.java2.lesson_05; + +public class MonothreadedCalculate { + public static void calc(float arr[]) { + for (int i = 0; i < arr.length; i++) { + arr[i] = (float) (arr[i] * Math.sin(0.2f + i / 5) * Math.cos(0.2f + i / 5) * Math.cos(0.4f + i / 2)); + } + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/MultithreadedCalculate.java b/src/ru/geekbrains/java2/lesson_05/MultithreadedCalculate.java new file mode 100644 index 0000000..67778c4 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/MultithreadedCalculate.java @@ -0,0 +1,52 @@ +package ru.geekbrains.java2.lesson_05; + +import java.util.ArrayList; +import java.util.Arrays; + +public class MultithreadedCalculate { + private static final int PARTSIZE = 100000; // РЕГУЛИРОВАТЬ КОЛ-ВО ПОТОКОВ МОЖНО ЭТОЙ ВЕЛИЧИНОЙ + + public static void calc(float arr[]) { + ArrayList arrayList = new ArrayList<>(); + + int currentLocatin = 0; + int nextLocation = PARTSIZE; + + while (currentLocatin < arr.length) { + if (nextLocation < arr.length) + arrayList.add(Arrays.copyOfRange(arr, currentLocatin, nextLocation)); + else + arrayList.add(Arrays.copyOfRange(arr, currentLocatin, arr.length)); + currentLocatin = nextLocation; + nextLocation += PARTSIZE; + } + + currentLocatin = 0; + ArrayList threadList = new ArrayList<>(); + for (float[] a : arrayList) { + Thread tmp = new Thread(new ThreadOfCalculation(a, currentLocatin)); + currentLocatin += PARTSIZE; + threadList.add(tmp); + tmp.start(); + } + + for (Thread h : threadList) { + try { + h.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + currentLocatin = 0; + for (float[] a : arrayList) { + System.arraycopy(a, 0, arr, currentLocatin, a.length); + // раскоментить цикл ниже для вывода границ склейки массивов + for (int i = currentLocatin; i < currentLocatin + PARTSIZE; i++) { + System.out.println("arr[" + i + "]: " + arr[i]); + if (i > currentLocatin + 2 && i < currentLocatin + PARTSIZE - 3) i = currentLocatin + PARTSIZE - 3; + } + currentLocatin += PARTSIZE; + } + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/ThreadOfCalculation.java b/src/ru/geekbrains/java2/lesson_05/ThreadOfCalculation.java new file mode 100644 index 0000000..98d2dea --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/ThreadOfCalculation.java @@ -0,0 +1,19 @@ +package ru.geekbrains.java2.lesson_05; + +public class ThreadOfCalculation implements Runnable { + private float arr[]; + private int offset; + + public ThreadOfCalculation(float[] arr, int offset) { + this.arr = arr; + this.offset = offset; + } + + @Override + public void run() { + for (int i = 0; i < arr.length; i++) { + int j = i + offset; + arr[i] = (float) (arr[i] * Math.sin(0.2f + j / 5) * Math.cos(0.2f + j / 5) * Math.cos(0.4f + j / 2)); + } + } +} diff --git a/src/ru/geekbrains/java2/lesson_05/TwothreadedCalculate.java b/src/ru/geekbrains/java2/lesson_05/TwothreadedCalculate.java new file mode 100644 index 0000000..635b189 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_05/TwothreadedCalculate.java @@ -0,0 +1,24 @@ +package ru.geekbrains.java2.lesson_05; + +import java.util.Arrays; + +public class TwothreadedCalculate { + public static void calc(float arr[]){ + int half = arr.length / 2; + float[] arr1 = Arrays.copyOfRange(arr, 0, half); + float[] arr2 = Arrays.copyOfRange(arr, half, arr.length); + Thread th1 = new Thread(new ThreadOfCalculation(arr1, 0)); + Thread th2 = new Thread(new ThreadOfCalculation(arr2, half)); + th1.start(); + th2.start(); + try { + th1.join(); + th2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + System.arraycopy(arr1, 0, arr, 0, half); + System.arraycopy(arr2, 0, arr, half, half); + } +} diff --git a/src/ru/geekbrains/java2/lesson_06/Classwork/client/Controller.java b/src/ru/geekbrains/java2/lesson_06/Classwork/client/Controller.java new file mode 100644 index 0000000..ff76fa0 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_06/Classwork/client/Controller.java @@ -0,0 +1,74 @@ +package ru.geekbrains.java2.lesson_06.Classwork.client; + +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.Button; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.net.URL; +import java.util.ResourceBundle; + +public class Controller implements Initializable { + public static final String SERVER_IP = "localhost"; + public static final int SERVER_PORT = 8189; + + @FXML + public TextArea chatArea; + @FXML + public TextField msgField; +// public Button sendButton; + + private Socket socket; + private DataOutputStream out; + + @Override + public void initialize(URL location, ResourceBundle resources) { + try { + socket = new Socket(SERVER_IP, SERVER_PORT); + DataInputStream in = new DataInputStream(socket.getInputStream()); + out = new DataOutputStream(socket.getOutputStream()); + Thread thread = new Thread(() -> { + String msg = ""; + try { + while (!msg.equals("echo answer: /end")) { + msg = in.readUTF(); + chatArea.appendText(msg + "\n"); + } + chatArea.appendText("соединение разорвано\n"); + } catch (IOException e) { + System.err.println("Сервер рвзорвал соединение"); + e.printStackTrace(); +// System.exit(0); + } + try { + socket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + }); + thread.setDaemon(true); + thread.start(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void sendMsg() { + if (!msgField.getText().equals("")) + try { + out.writeUTF(msgField.getText()); + out.flush(); + msgField.clear(); + msgField.requestFocus(); + } catch (IOException e) { + chatArea.appendText("нет связи с сервером\n"); + } + } + +} + diff --git a/src/ru/geekbrains/java2/lesson_06/Classwork/client/Main.java b/src/ru/geekbrains/java2/lesson_06/Classwork/client/Main.java new file mode 100644 index 0000000..4c4e59b --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_06/Classwork/client/Main.java @@ -0,0 +1,23 @@ +package ru.geekbrains.java2.lesson_06.Classwork.client; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class Main extends Application { + + @Override + public void start(Stage primaryStage) throws Exception{ + Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); + primaryStage.setTitle("Geek JavaFX chat"); + primaryStage.setScene(new Scene(root, 400, 600)); + primaryStage.show(); + } + + + public static void main(String[] args) { + launch(args); + } +} diff --git a/src/ru/geekbrains/java2/lesson_06/Classwork/client/sample.fxml b/src/ru/geekbrains/java2/lesson_06/Classwork/client/sample.fxml new file mode 100644 index 0000000..13236a6 --- /dev/null +++ b/src/ru/geekbrains/java2/lesson_06/Classwork/client/sample.fxml @@ -0,0 +1,14 @@ + + + + + + +