Invece della progressBarInputStream ho provato ad usare JProgressBar.
Mi compare la dialog con la progress bar che aumenta, ma non mi scrive nulla nell'editor.
Posto il codice del metodo openFile e
Le classi LonkTask e SwingWorker sono quelle prese dal sito della sun
Forse sbaglio il punto in cui chiamo il metodo doRead, forse la sua chiamata va messa dentro la classe LongTask?
codice:OpenAction() { super(openAction); } public void actionPerformed(ActionEvent e) { Frame frame = getFrame(); if (fileDialog == null) { fileDialog = new FileDialog(frame); } fileDialog.setMode(FileDialog.LOAD); fileDialog.show(); String file = fileDialog.getFile(); if (file == null) { return; } String directory = fileDialog.getDirectory(); final File f = new File(directory, file); if (f.exists()) { Document oldDoc = getEditor().getDocument(); if (oldDoc != null) oldDoc.removeUndoableEditListener(undoHandler); if (elementTreePanel != null) { elementTreePanel.setEditor(null); } getEditor().setDocument(new PlainDocument()); final Document doc = getEditor().getDocument(); frame.setTitle(file); //Thread loader = new FileLoader(f, editor.getDocument()); //loader.start(); System.out.println("long size: " + f.length()); System.out.println("int size: " + (int) f.length()); task = new LongTask((int) f.length()); //Create the demo's UI. progressBar = new JProgressBar(0, task.getLengthOfTask()); progressBar.setValue(0); progressBar.setStringPainted(true); taskOutput = new JTextArea(5, 20); taskOutput.setMargin(new Insets(5, 5, 5, 5)); taskOutput.setEditable(false); taskOutput.setCursor(null); //inherit the panel's cursor //see bug 4851758 final JDialog dialog = new JDialog(frame, "Loading text file", true); JPanel panel = new JPanel(); panel.add(progressBar); dialog.getContentPane().add(panel, BorderLayout.PAGE_START); dialog.getContentPane().add(new JScrollPane(taskOutput), BorderLayout.CENTER); //dialog.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, // 20)); //Create a timer. timer = new Timer(ONE_SECOND, new ActionListener() { public void actionPerformed(ActionEvent evt) { progressBar.setValue(task.getCurrent()); String s = task.getMessage(); if (s != null) { taskOutput.append(s + newline); taskOutput.setCaretPosition(taskOutput.getDocument().getLength()); } if (task.isDone()) { Toolkit.getDefaultToolkit().beep(); timer.stop(); dialog.getContentPane().setCursor(null); //turn off // the wait // cursor progressBar.setValue(progressBar.getMinimum()); dialog.dispose(); } } }); dialog.getContentPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); task.go(); timer.start(); dialog.setSize(400, 350); dialog.setVisible(true); Thread t = new Thread() { public void run() { doRead(f, doc); } }; } } private void doRead(File f, Document doc) { FileReader fr; try { fr = new FileReader(f); BufferedReader br = new BufferedReader(fr); String input = br.readLine(); while (input != null) { input = br.readLine(); doc.insertString(doc.getLength(), input, null); } br.close(); } catch (Exception e1) { e1.printStackTrace(); } } }

Rispondi quotando