Многопоточная передача файлов Java Socket зависает после загрузки ⇐ JAVA
Многопоточная передача файлов Java Socket зависает после загрузки
Я реализовал серверно-клиентскую программу с использованием Java Socket и многопоточности. Программа позволяет клиентам отправлять файлы на сервер, просматривать файлы и загружать их. Но у меня возникла проблема: когда мой клиент загружает файл, программа/интерфейс зависает, и клиент не может выполнить ни одну операцию. Не могу просмотреть, скачать или загрузить. Но файл правильно отправляется на сервер. Кто-нибудь знает, что происходит??
Мой клиент
import javax.swing.*; импортировать java.awt.*; импортировать java.awt.event.ActionEvent; импортировать java.awt.event.ActionListener; импортировать java.io.*; импортировать java.net.Socket; импортировать java.util.ArrayList; импортировать java.util.List; общественный класс FileClient { частная статическая окончательная строка SERVER_HOST = «localhost»; частный статический финал int SERVER_PORT = 12345; частный статический сокет; частный статический DataInputStream в; частный статический выход DataOutputStream; частный статический JList fileList; частная статическая DefaultListModel listModel; public static void main(String[] args) { пытаться { сокет = новый сокет (SERVER_HOST, SERVER_PORT); out = новый DataOutputStream(socket.getOutputStream()); in = новый DataInputStream(socket.getInputStream()); JFrame Frame = новый JFrame («Файловый клиент»); Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Frame.setSize(400, 400); Панель JPanel = новая JPanel(); JButton listButton = новый JButton («Список файлов»); JButton downloadButton = новая JButton("Загрузить файл"); JButton uploadButton = новая JButton («Загрузить файл»); listModel = новая DefaultListModel(); fileList = новый JList(listModel); fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane ScrollPane = новый JScrollPane (fileList); listButton.addActionListener(новый ActionListener() { @Override общественный недействительный actionPerformed (ActionEvent e) { // Выполнение операции со списком в отдельном потоке SwingWorker listWorker = новый SwingWorker() { @Override protected Void doInBackground() выдает исключение { СписокФайлов(); вернуть ноль; } }; listWorker.execute(); } }); downloadButton.addActionListener(новый ActionListener() { @Override общественный недействительный actionPerformed (ActionEvent e) { // Выполняем операцию загрузки в отдельном потоке SwingWorker downloadWorker = новый SwingWorker() { @Override protected Void doInBackground() выдает исключение { Загрузка файла(); вернуть ноль; } }; скачатьWorker.execute(); } }); uploadButton.addActionListener(новый ActionListener() { @Override общественный недействительный actionPerformed (ActionEvent e) { // Выполняем операцию загрузки в отдельный поток SwingWorker uploadWorker = новый SwingWorker() { @Override protected Void doInBackground() выдает исключение { загрузить файл(); вернуть ноль; } }; uploadWorker.execute(); } }); Panel.add(listButton); Panel.add(downloadButton); панель.добавить(кнопка загрузки); Frame.add(панель, BorderLayout.NORTH); Frame.add(scrollPane, BorderLayout.CENTER); Frame.setVisible(истина); } catch (IOException e) { е.printStackTrace(); } } частный статический void listFiles() { пытаться { out.writeUTF("список"); int numFiles = in.readInt(); Файлы List = новый ArrayList(); для (int я = 0; я
Я реализовал серверно-клиентскую программу с использованием Java Socket и многопоточности. Программа позволяет клиентам отправлять файлы на сервер, просматривать файлы и загружать их. Но у меня возникла проблема: когда мой клиент загружает файл, программа/интерфейс зависает, и клиент не может выполнить ни одну операцию. Не могу просмотреть, скачать или загрузить. Но файл правильно отправляется на сервер. Кто-нибудь знает, что происходит??
Мой клиент
import javax.swing.*; импортировать java.awt.*; импортировать java.awt.event.ActionEvent; импортировать java.awt.event.ActionListener; импортировать java.io.*; импортировать java.net.Socket; импортировать java.util.ArrayList; импортировать java.util.List; общественный класс FileClient { частная статическая окончательная строка SERVER_HOST = «localhost»; частный статический финал int SERVER_PORT = 12345; частный статический сокет; частный статический DataInputStream в; частный статический выход DataOutputStream; частный статический JList fileList; частная статическая DefaultListModel listModel; public static void main(String[] args) { пытаться { сокет = новый сокет (SERVER_HOST, SERVER_PORT); out = новый DataOutputStream(socket.getOutputStream()); in = новый DataInputStream(socket.getInputStream()); JFrame Frame = новый JFrame («Файловый клиент»); Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Frame.setSize(400, 400); Панель JPanel = новая JPanel(); JButton listButton = новый JButton («Список файлов»); JButton downloadButton = новая JButton("Загрузить файл"); JButton uploadButton = новая JButton («Загрузить файл»); listModel = новая DefaultListModel(); fileList = новый JList(listModel); fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane ScrollPane = новый JScrollPane (fileList); listButton.addActionListener(новый ActionListener() { @Override общественный недействительный actionPerformed (ActionEvent e) { // Выполнение операции со списком в отдельном потоке SwingWorker listWorker = новый SwingWorker() { @Override protected Void doInBackground() выдает исключение { СписокФайлов(); вернуть ноль; } }; listWorker.execute(); } }); downloadButton.addActionListener(новый ActionListener() { @Override общественный недействительный actionPerformed (ActionEvent e) { // Выполняем операцию загрузки в отдельном потоке SwingWorker downloadWorker = новый SwingWorker() { @Override protected Void doInBackground() выдает исключение { Загрузка файла(); вернуть ноль; } }; скачатьWorker.execute(); } }); uploadButton.addActionListener(новый ActionListener() { @Override общественный недействительный actionPerformed (ActionEvent e) { // Выполняем операцию загрузки в отдельный поток SwingWorker uploadWorker = новый SwingWorker() { @Override protected Void doInBackground() выдает исключение { загрузить файл(); вернуть ноль; } }; uploadWorker.execute(); } }); Panel.add(listButton); Panel.add(downloadButton); панель.добавить(кнопка загрузки); Frame.add(панель, BorderLayout.NORTH); Frame.add(scrollPane, BorderLayout.CENTER); Frame.setVisible(истина); } catch (IOException e) { е.printStackTrace(); } } частный статический void listFiles() { пытаться { out.writeUTF("список"); int numFiles = in.readInt(); Файлы List = новый ArrayList(); для (int я = 0; я
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Socket IO Java Android App и Socket IO JavaScript Server Достоверное подключение?
Anonymous » » в форуме Android - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Socket IO Java Android App и Socket IO JavaScript Server Достоверное подключение?
Anonymous » » в форуме JAVA - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-