Jak przerobic Java aplication na JApplet ?

0

Może ktoś pomóc lub udzielić jakieś wskazówki jak przerobić ten program na JApplet ?

import java.net.*;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
 
public class klient2 extends JFrame
        implements Runnable,ActionListener {
    private int port;
    private Socket s;
    private ObjectOutputStream output;
    private ObjectInputStream input;
    private String host,m="",m1="";
    JTextField nazwa = new JTextField(40);
    JTextArea komentarz = new JTextArea(16,40);
 
 
    klient2(String host_, int port_, int i) {
        super("Klient ");
      //  ++serwer2.nr;
        host = host_;
        port = port_;
        setSize(550,360);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        nazwa.addActionListener(this);
        JPanel panel=new JPanel();
        JLabel etykieta_nazwy = new JLabel("Napisz");
        JLabel etykieta_komentarza = new JLabel  ("Rozmowa");
        komentarz.setLineWrap(true);
        komentarz.setWrapStyleWord(true);
        panel.add(etykieta_nazwy);
        panel.add(nazwa);
        panel.add(etykieta_komentarza);
        panel.add(komentarz);
        JScrollPane obszar_przewijany1 = new JScrollPane
                (komentarz,
                ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        panel.add(obszar_przewijany1);
        setContentPane(panel);
        setVisible(true);
 
    }
    public void actionPerformed(ActionEvent evt) {
        Object zrodlo = evt.getSource();
        if(zrodlo==nazwa) {
            m1=nazwa.getText();
            if (s!=null)
                try {
                    output.writeObject(m1);
                } catch(Exception e) {
                    System.out.println("Wyjatek klienta3 "+e);}
        }
        repaint();
    }
    public void run() {
        String pom;
        try {
            s = new Socket(host,port);
            input = new ObjectInputStream(s.getInputStream());
            output = new ObjectOutputStream(s.getOutputStream());
            output.flush();
            komentarz.setText("Klient startuje na hoscie "+
                    InetAddress.getLocalHost().getHostName()+"\n\nJesli jestes tu pierwszy raz wpsiz Pomoc");
 
                    //setTitle("Klient "+serwer2.nr);
        }catch (Exception e) {
            System.out.println("Wyjatek klienta1 "+e);}
 
        try {
            do
            { if(!m1.equals("czesc")&&!m.equals("czesc")) {
                  m=(String) input.readObject();
                  komentarz.setText("");
                  pom=komentarz.getText();
                  komentarz.setText(pom+"Dane odebrane od serwera: \n\n"+m+"\n");
              }
            }while(!m.equals("czesc"));
            s.close();
            s=null;
            output.close();
            input.close();
            //setVisible(false);
        }catch (Exception e) {
            System.out.println("Wyjatek klienta2 "+e);}
 
    }    
    public static void main(String args[]) throws Exception {
        String s = JOptionPane.showInputDialog(null, "Podaj ip","127.0.0.1");//"localhost";///InetAddress.getLocalHost().getHostName();
        klient2 k2= new klient2(s,15000,1);
        Thread t = new Thread(k2);
        t.start();
    }
}
0

Ja bym poradził coś prostszego. Wygląda na to, że ten program nie używa żadnych zabronionych przez Aplet operacji, więc najprościej dopisać po prostu klasę apletu, która wywoła ten program w momencie startu apletu, który nic nie robi. Kod takiej klasy może wyglądać tak:

class CallKlient2 extends JApplet
{
	@Override public void init()
	{
		try { klient2.main(new String[]{}); } //brak argumentów wywołania
		catch(Exception ex) {} //po jakiegoś grzyba main ma throws
	}
}

Robiąc to klasyczną metodą przerabiania:
Trzebaby zmienić dziedziczenie klient2 na (np.) JApplet, następnie kod metody main wpakować do własnej wersji metody init(), a kod konstruktora klient2 do metody start() (lub wszystko razem do init()).
Dodatkowo usunąć instrukcje konstruujące JFrame i ustalające jego stan (bo pole robocze apletu jest już stworzone przez przeglądarkę). Metod stop i destroy właściwie nie trzaba dotykać.

0

Tylko ze tam jest JPanel...

0

A w czym to przeszkadza? Wiele apletów ma w sobie obiekty JPanel. Klasycznym przykładem jest choćby SwingSet2 i 3 oraz wiele gier Java.

1 użytkowników online, w tym zalogowanych: 0, gości: 1