Cześć,
piszę program, w którym w jednym okienku jest generowana i wyświetlana tablica wartości całkowitych, zaś w drugim podawane współrzędne x, y tej tablicy i pobierana wartość z pierwszej aplikacji oraz rysowany wykres słupkowy z podaną wartością. Z częścią graficzną już się uporałem. Przyszedł czas na zapewnienie łączności między aplikacjami i tutaj pojawił się problem, bo nie wiem czy dobrze się do tego zabrałem.
Oto mój kod:
Serwer:
package lab05_pop;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.Random;
import javax.swing.*;
@SuppressWarnings("serial")
public class Serwer extends JFrame implements ActionListener {
JButton generuj;
JTextArea poleTekstowe;
int [][] tablica = new int [10][10];
ServerSocket polaczenie = null;
Socket gniazdo = null;
OutputStream wyX;
OutputStream wyY;
DataOutputStream zapisX = null;
DataOutputStream zapisY = null;
InputStream weX;
InputStream weY;
BufferedReader odczytX = null;
BufferedReader odczytY = null;
String x ="", y = "";
String wartosc = "";
DataOutputStream komorkaTablicy = null;
void wypełnij (){
Random gen = new Random();
for (int i=0; i<tablica.length; i++){
for (int j=0; j<tablica[i].length; j++)
tablica[i][j]=gen.nextInt(10);
}
}
void wyświetl (){
for (int i=0; i<tablica.length; i++){
for (int j=0; j<tablica[i].length; j++){
poleTekstowe.append(" " + tablica[i][j]);
}
poleTekstowe.append("\n");
}
}
@Override
public void actionPerformed(ActionEvent e) {
poleTekstowe.setText("");
wypełnij();
wyświetl();
}
public void łączność (){
try {
polaczenie = new ServerSocket(8864);
}
catch(IOException e)
{ System.out.println("Nie można utworzyć gniazda serwera."); }
try {
gniazdo = polaczenie.accept();
}
catch(IOException e)
{ System.out.println("Nie można nawiązać połączenia z klientem."); }
try {
weX=gniazdo.getInputStream();
}
catch(IOException e)
{ System.out.println("Nie można pobrać strumienia wejściowego."); }
try {
wyX=gniazdo.getOutputStream();
}
catch(IOException e)
{ System.out.println("Nie można pobrać strumienia wyjściowego."); }
try {
weY=gniazdo.getInputStream();
}
catch(IOException e)
{ System.out.println("Nie można pobrać strumienia wejściowego."); }
try {
wyY=gniazdo.getOutputStream();
}
catch(IOException e)
{ System.out.println("Nie można pobrać strumienia wyjściowego."); }
while(true){
try{
odczytX = new BufferedReader(new InputStreamReader(weX));
odczytY = new BufferedReader(new InputStreamReader(weY));
x = odczytX.readLine();
y = odczytY.readLine();
if(x == null && y == null)
{
gniazdo.close();
System.exit(0);
}
else if(x != null && y != null)
{
for (int i=0; i<tablica.length; i++){
for (int j=0; j<tablica[i].length; j++){
if (x==String.valueOf(i) && y==String.valueOf(j))
wartosc = String.valueOf(tablica[i][j]);
}
}
}
} catch(IOException e){ System.out.println("Problem wejścia - wyjścia."); }
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Serwer serwer = new Serwer();
serwer.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Serwer (){
setTitle ("Serwer");
setSize(400, 500);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
generuj = new JButton ("Generuj");
generuj.setBounds(150, 400, 100, 20);
add(generuj);
generuj.addActionListener (this);
poleTekstowe = new JTextArea ();
poleTekstowe.setBounds(75, 20, 250, 300);
add(poleTekstowe);
Font font = new Font("Verdana", Font.BOLD, 23);
poleTekstowe.setFont(font);
poleTekstowe.setLineWrap(true);
}
}
Klient:
package lab05_pop;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class Klient extends JFrame implements ActionListener {
JTextArea poleX, poleY;
JButton pobierz;
Socket polaczenie = null;
OutputStream wyX;
OutputStream wyY;
InputStream weX;
InputStream weY;
BufferedReader odczytX = null;
BufferedReader odczytY = null;
Wczytanie wczytanie = null;
public void linie (Graphics g){
g.drawLine(50, 240, 50, 40); //oś y = 200 px
g.drawLine(50, 240, 350, 240); //oś x = 300 px
g.drawLine(50, 40, 40, 50);
g.drawLine(50, 40, 60, 50);
g.drawLine(350, 240, 340, 230);
g.drawLine(350, 240, 340, 250);
for(int i=0; i<14; i++)
g.drawLine(70+(i*20), 235, 70+(i*20), 245);
for(int i=0; i<9; i++)
g.drawLine(45, 220-(i*20), 55, 220-(i*20));
g.drawString("0", 45, 255);
}
public void wykres (Graphics g){
int wysokosc = 9;
g.drawRect(70-10, 240, 20, -20*wysokosc);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
linie (g2d);
wykres (g2d);
}
@Override
public void actionPerformed(ActionEvent e) {
wczytanie=new Wczytanie(polaczenie, wyX, wyY);
wczytanie.start();
}
class Wczytanie extends Thread {
Socket polaczenie;
OutputStream wyX;
OutputStream wyY;
DataOutputStream zapisX = null;
DataOutputStream zapisY = null;
InputStream weX;
InputStream weY;
BufferedReader odczytX = null;
BufferedReader odczytY = null;
public Wczytanie (Socket polaczenie, OutputStream wyX, OutputStream wyY)
{
this.polaczenie=polaczenie;
this.wyX=wyX;
this.wyY=wyY;
}
public void run() {
try{
wyX=polaczenie.getOutputStream();
String x = poleX.getText();
wyY=polaczenie.getOutputStream();
String y = poleY.getText();
if(x!=null && y!=null){
zapisX = new DataOutputStream(wyX);
zapisY = new DataOutputStream(wyY);
}
weX=polaczenie.getInputStream();
odczytX= new BufferedReader (new InputStreamReader(weX));
weY=polaczenie.getInputStream();
odczytY= new BufferedReader (new InputStreamReader(weY));
}
catch(Exception e){
}
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Klient klient = new Klient();
klient.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Klient (){
setTitle ("Klient");
setSize(400, 500);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
poleX = new JTextArea ();
poleX.setBounds(75, 350, 100, 20);
add(poleX);
poleY = new JTextArea ();
poleY.setBounds(225, 350, 100, 20);
add(poleY);
pobierz = new JButton ("Pobierz");
pobierz.setBounds(150, 400, 100, 20);
add(pobierz);
pobierz.addActionListener (this);
try{
polaczenie= new Socket("localhost", 8866);
} catch(Exception e){
}
}
}
Pytania:
Jak zrobić aby przy kompilacji wyświetlały się oba okienka programu?
Czy mógłby ktoś rzucić okiem czy dobrze to piszę? Doszedłem do takiego momentu, że nie do końca wiem co dalej robić ani jak przetestować działanie przesyłu danych.
Proszę o wszelkie wskazówki i porady.
Pozdrawiam.