Applet z plikami zewnątrznymi i kompresja do jara

0

Witam!

Właśnie zacząłem dwa tygodnie temu bawić się w Javie i napisałem applet w JCreatorze wyświetlający interaktywną panoramę górską (najeżdżając na szczyty pojawiają się strzałki z opisami). Applet składa sie z kilku klas, jednego jpga i kilku plików txt (to taka baza danych) i to wszystko znajduje sie w jednym katalogu. Nie wiem jednak jak odpalić to w przeglądarce.

Na początku spróbowałem przerobić trochę prostszą wersję programu, czyli taki mój edytor, który wyświetla panoramę i współrzędne miejsca wskazanego przez kursor, czyli nie korzystający z plikow txt, tylko z tego jednego jpga.
Zmieniłem więc sposób ładowania pliku jpg:
try
{
img=ImageIO.read(NowaPrezentacja.class.getResourceAsStream(nazwa+".jpg"));
}
catch(IOException e){}

Program się kompiluje.
Zrobiłem jara pakując to wszystko (pliki class i jpg) w winrarze do pliku zip (bez kompresji) i zmieniając rozszerzenie.
Do tego plik html wygląda tak:

<html> <head> </head> <body bgcolor="000000"> <applet code="NowaPrezentacja.class" archive="nowy.jar" width="1000" height="298"> </applet> </body> </html>

Niestety lipa!
Pewnie pytam o jakieś głupoty ale proszę o wyrozumiałość, bo dopiero zacząłem.

0

Ja pobieram obrazki z jara tak:

  img=getImage(getDocumentBase(),"man.jpg");

Z plikami niegraficznymi jest troche trudniej, spróbuj tak

        try
        {
            JarFile jf=new JarFile("pewien.jar");
            ZipEntry ze=jf.getEntry("dane.txt");
            InputStream is=jf.getInputStream(ze);
            byte[] bufor=new byte[(int) ze.getSize()];
            is.read(bufor);
            is.close();
        }
    	catch (Exception e)
    	{
    	}

pozdrawiam

0

Z plikami graficznymi juz sobie poradzilem sam. Ale z tekstowymi jest faktycznie gorzej.
Ja muszę te pliki policzyć. Muszę wiedzieć czy istnieją.
Czy mogę zrobić coś w stylu:
if(ze==null){cos tam}
Muszę zczytywać linię po linii.

Tak wyglada mój oryginalny kod klasy, która korzysta z plików txt.

import java.io.*;

public class Panorama 
{
	Obrazek obrazek;
	int ilosc;
	Punkt Baza[];
	String odczyt[]=new String[5];

    public Panorama(Obrazek obrazek) 
    {
    	this.obrazek=obrazek;
    	
		for(int i=0;;i++)
    	{
    		int k=i+1;
 			String nazwa=obrazek.nazwa+k+".txt";
    		File file=new File(nazwa);
    		if(!file.exists())
    		{
    			break;
    		}
    		ilosc=i+1;   	
    	}
    	Baza=new Punkt[ilosc];

    	for(int i=0;;i++)
    	{
    		
    		int k=i+1;
    		String nazwa=obrazek.nazwa+k+".txt";
    		File file=new File(nazwa);
    		if(!file.exists())
    		{
    			return;
    		}
    		RandomAccessFile raf=null;
    		
    		try
    		{
    			raf=new RandomAccessFile(file,"r");
    		}
    		catch(FileNotFoundException e)
    		{
    			return;
    		}
    		try
    		{
    			for(int j=0;j<5;j++)
    			{
    				odczyt[j]=raf.readLine();
    			}
    			raf.close();
    		}
    		catch(IOException e)
    		{
    			/////
    		}
    
    		Punkt punkt=new Punkt(konwersja(odczyt[0]),konwersja(odczyt[1]),konwersja(odczyt[2]),konwersja(odczyt[4]),odczyt[3]);
    		Baza[i]=punkt;
    	}
    	
    	////////
    	
    	//Punkt punkt=new Punkt(740,100,1,2061,naz);
    	//Baza[ilosc-1]=punkt;
    }
    
	public int konwersja(String tekst)
	{
    	int liczba=0;
    	int dziesiatka=1;
   	 	int dlugosc =tekst.length();
    	for(int i=0;i<dlugosc;i++)
    	{
    		char znak=tekst.charAt(dlugosc-1-i);
    		liczba=liczba+(znak-48)*dziesiatka;
    		dziesiatka=dziesiatka*10;
    	}
    	return liczba;
	}
      
}

Dzieki za wszelkie uwagi.

0

try
{
JarFile jf=new JarFile("pewien.jar");
ZipEntry ze=jf.getEntry("dane.txt");
InputStream is=jf.getInputStream(ze);
byte[] bufor=new byte[(int) ze.getSize()];
is.read(bufor);
is.close();
}
catch (Exception e)
{
}
Witam,

Sam także chcę wczytać plik tekstowy z pliku umieszczonego na serwerze osobno, albo w pliku jar.
Niestety w/w sposób nie działa w przypadku apletu. Uruchamia się tylko ze zwykej javowskiej aplikacji.
Jak z resztą opisane jest na stronie java.sun.com aplet nie moze pobierac pliku z komputera
odpalającego stronę, ani z innego źródła poza serwerem na którym jest umieszczony.

Let somebody help us!!

0

Przykład apletu, który odczytuje plik tekstowy z serwera:

import java.applet.*;
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.net.*;
import java.io.*;

public class ReaderAplet extends JApplet
{
    private JTextArea ta=new JTextArea();
    //------------------------
    public void init()
    {
        setLayout(new BorderLayout(2,2));
        ta.setEditable(false);
        URL url=null;
        InputStream is=null;
        byte[] bufor=new byte[1000];
        String file=getParameter("file");
        if(file==null)
        {
            file="Test.txt";
        }
        try
        {
            url=new URL(getDocumentBase(),file);
            is=url.openStream();
            is.read(bufor);
            is.close();
            ta.setText(new String(bufor));
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
        JScrollPane sp=new JScrollPane(ta);
        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        add(sp,"Center");
    }
}

Jeśli pliku brak pojawia się wyjątek FileNotFoundException. Kłopoty są z ustaleniem rozmiaru bufora (w przykładzie jest 1000), można go przekazywać do apletu jako parametr, można próbować metody

int rozmiar=is.avalaible();

ale Note that while some implementations of InputStream will return the total number of bytes in the stream, many will not. It is never correct to use the return value of this method to allocate a buffer intended to hold all data in this stream. (fragment dokumentacji metody InputStream,avalaible()), można tworzyć bufor na wyrost.

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