Witam,
Napisałem prosty kod pobierający pliku .mp3 z wrzuta.pl na dysk. Postanowiłem wprowadzić tam postęp pobierania pliku, niestety nie działa on podczas gdy plik jest pobierany, tylko zaktualizuje się po jego pobraniu (nie działa repaint() ?).
Próbowałem wprowadzić 2 wątek który ma za zadanie odmalowywanie okna lecz to nic nie dało.
Niewiem czy ogólna koncepcja którą zrobiłem jest dobra...
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package zrzuta;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.Timer;
import java.util.TimerTask;
/**
*
* @author Marek
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
Frame frame = new Frame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
});
}
}
class Frame extends JFrame {
public Frame()
{
Toolkit tools = Toolkit.getDefaultToolkit();
Dimension screen = tools.getScreenSize();
setTitle("Zrzuter");
setBounds(screen.width/2-(width/2), screen.height/2-(height/2), width, height);
setResizable(false);
Container content = getContentPane();
content.add(new Panel());
}
private int width = 400;
private int height = 100;
}
class Panel extends JPanel {
public Panel()
{
// setLayout(new BorderLayout());
text = new JTextField(20);
button = new JButton("Pobierz");
button.addActionListener(new Click());
JPanel panel = new JPanel();
panel.add(new Label("Url do utworu:"));
panel.add(text);
add(panel);
add(button);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.drawString(asize+" / "+size, 5, 70);
}
private class Click implements ActionListener {
public void actionPerformed(ActionEvent event)
{
String url = text.getText();
url = url.replace("audio", "sr/f");
try
{
URL urlw = new URL(url);
URLConnection connect = urlw.openConnection();
size = connect.getContentLength();
String type = connect.getContentType();
String[] names = url.split("/");
String filename = names[names.length-1]+".mp3";
// czytanie pliku
InputStream in = urlw.openStream();
// zapis do pliku na dysku
FileOutputStream out = new FileOutputStream(filename, true);
SizeThread sizeThread = new SizeThread();
sizeThread.start();
int x;
byte data[] = new byte[1024];
while((x = in.read(data,0,1024)) >= 0)
{
asize += x;
out.write(data, 0, x);
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
private class SizeThread extends Thread {
public void run()
{
while(asize < size)
repaint();
}
}
public int size,asize = 0;
private JTextField text;
private JButton button;
}