私はこの例ではwget
を使ってexeをダウンロードするGUIプログラムを持っています。私は、ファイルをダウンロードするスレッドを設定しました。ファイルのサイズを保持する静的変数があります。次に、実際のファイルサイズをチェックし、ダウンロードが100%完了するまでJLabel
を更新するwhileループがあります。 GUIは明らかに更新されておらず、スレッドが完了するまですべてが停止しています。このスレッドを作成することはこの問題を回避することになると私は思っていました。私が間違っていたこととスレッドを変更する必要があることを教えてください。私はこれを現在のように単純にしておきたいと思っています。Java GUIスレッディング
FYI:System.out.println()
があるので、現在のファイルサイズが正しく更新されていることがわかります。また、ダウンロードされているファイルがすでに存在する場合(whileループが瞬時に真であるため)、全体が機能しません。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class downloaderProgram implements ActionListener {
JFrame frame;
JPanel p1, p2, p3;
JButton start;
JLabel status;
downloaderProgram() {
frame = new JFrame("Downloader");
frame.setSize(500, 400);
//p1
p1 = new JPanel();
//p2
p2 = new JPanel();
status = new JLabel("");
p2.add(status);
//p3
GridLayout p3Grid = new GridLayout(0, 1);
p3 = new JPanel();
p3.setLayout(p3Grid);
start = new JButton("Start");
start.setMargin(new Insets(10,0,10,0));
p3.add(start);
//frame
frame.add(p1, BorderLayout.NORTH);
frame.add(p2, BorderLayout.CENTER);
frame.add(p3, BorderLayout.SOUTH);
start.addActionListener(this);
//output.setEditable(false);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(start)) {
long fileSize = 1110476;
downloadThread dt = new downloadThread();
dt.start();
long length = 0;
File download = new File("7z920.exe");
while (length != fileSize) {
length = download.length();
status.setText(Long.toString(length));
System.out.println(Long.toString(length));
}
start.setEnabled(false);
}
}
public static void main(String[] args) {
new downloaderProgram();
}
}
class downloadThread extends Thread {
public void run() {
try {
String cmd = "wget http://downloads.sourceforge.net/sevenzip/7z920.exe";
Runtime run = Runtime.getRuntime();
Process pr = run.exec(cmd);
} catch(IOException io) {
System.out.println(io);
}
}
}
申し訳ありませんが、スペースがちょっと混乱していると、私のIDEからうまくコピーできませんでした。ありがとう!
Huhh .. 7 Zipをインストールするには壊れやすい方法のようです。どのようにwgetをインストールしますか? –
私はちょうど例のダウンロードとして7zip exeを使用しました...それをインストールする方法ではありません。 – carget
Java命名規則を学び、それらに固執してください – kleopatra