Otwieranie wybranego dokumentu

0

Witam!

Uporałem się z pierwszymi problemami i mam okno dialogowego z buttonem, który przenosi mnie do wyboru pliku, po kliknięciu na dany dokument program wypisuje jego nazwę.
Szukam od rana rozwiązania, żeby program nie wyświetlał nazwy pliku tylko dany plik otwierał, np. gdy kliknę na plik w formacie pdf to program mi go otworzy w adobe, tak samo z plikami innych formatów.
Proszę chociaż o podanie np. nazwy biblioteki, która się tym zajmuje albo coś podobnego, a reszte postaram się już poczytać i sam zrozumieć zasade działania.

Pozdrawiam!

0

Można tak:

		try {
			Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler C:/dokument.pdf");
		} catch (Exception e) {
			System.out.println("Error" + e);
		}
0

No, ale to wtedy będę otwierał tylko jeden plik wskazany w kodzie.
A mi chodzi o to, żebym mógł wchodząc w program wybrać i otworzyć obojętnie, który chce plik.

0

Zamiast owego C:/dokument.pdf powinieneś w kodzie mieć zmienną do której wcześniej zapakujesz ścieżkę... Czyli w JFileChooser powinieneś mieć coś takiego:

String sciezka;
JFileChooser chooser = new JFileChooser();
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
          sciezka = chooser.getSelectedFile().toString();
}
0

Mam taki kod, i nie bardzo wiem jak tego Twoje użyć, by działał tak jak chce.

package test;
import javax.swing.*;
import java.awt.event.*;


public class Main extends JFrame implements ActionListener {
    public Main(){
        super("Aplikacja okienkowa");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JMenu menu1 = new JMenu("Plik");
        JMenuItem menu1item1 = new JMenuItem("Wybierz plik");
        JMenuItem menu1item2 = new JMenuItem("Zamknij");
        menu1item1.setActionCommand("chooseFile");
        menu1item2.setActionCommand("close");
        menu1item1.addActionListener(this);
        menu1item2.addActionListener(this);
        menu1.add(menu1item1);
        menu1.add(menu1item2);

        JMenuBar menuBar = new JMenuBar();
        menuBar.add(menu1);
        setJMenuBar(menuBar);

        setLayout(null); 
        JButton button1 = new JButton("Kliknij");
        button1.setSize(80, 30);
        button1.setLocation(115, 55);
        button1.setActionCommand("chooseFile");
        button1.addActionListener(this);
        add(button1);

        setSize(320, 200);
        setVisible(true);

    }


    public void actionPerformed(ActionEvent e){
        String cmd = e.getActionCommand();
        if("chooseFile".equals(cmd)){
            JFileChooser fc = new JFileChooser();
            if(fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION){
                String nazwaPliku = fc.getSelectedFile().getName();
                JOptionPane.showMessageDialog(this, "Wybrano plik: " + nazwaPliku,
                        "Informacja!", JOptionPane.INFORMATION_MESSAGE);
            }
        }
        else if("close".equals(cmd)){
            dispose();
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                new Main();
            }
        });

    }
}
0

Nie wstawiłeś kawałka kodu, który przesłałem Ci w pierwszym poście... Podmień metodę actionPerformed na to co poniżej:

    public void actionPerformed(ActionEvent e){
        String cmd = e.getActionCommand();
        if("chooseFile".equals(cmd)){
            JFileChooser fc = new JFileChooser();
            if(fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION){
                String sciezkaDoPliku = fc.getSelectedFile().getAbsolutePath();
                try {
                    Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + sciezkaDoPliku);
                } catch (Exception er) {
                    System.out.println("Error" + er);
                }
                JOptionPane.showMessageDialog(this, "Wybrano plik: " + sciezkaDoPliku,
                        "Informacja!", JOptionPane.INFORMATION_MESSAGE);
            }
        }
        else if("close".equals(cmd)){
            dispose();
        }
    }
0

No niestety wywala taki błąd przy uruchamianiu:

Exception in thread "main" java.lang.NoSuchMethodException: test.Main.main([Ljava.lang.String;)
	at java.lang.Class.getMethod(Class.java:1786)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:125)
0

Wywala mi taki błąd:

Exception in thread "main" java.lang.NoSuchMethodException: test.Main.main([Ljava.lang.String;)
    at java.lang.Class.getMethod(Class.java:1786)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:125)
0

Wywal to running configuration i stwórz nowe.

0

A która z bibliotek odpowiada za otwarcie pliku?
Bo próbowałem ze swinga różnych opcji, ale nic to nie daje, zawracana jest nazwa pliku, a nie jest on otwierany.
Jakaś podpowiedź?

0

Możesz spróbować tego:
http://docs.oracle.com/javase/8/docs/api/java/awt/Desktop.html#open-java.io.File-

Teoretycznie powinno robić dokładnie to czego potrzebujesz ale głowy nie dam, bo sam nigdy nie próbowałem.

0

Ok, dzięki. Spróbuje tego co poleciłeś.
Jednak zmieniłem troszkę koncepcję w innym programie, i chce by po naciśnięciu danego buttona otworzył się dany plik.
Niestety po naciśnięciu przycisku nic się nie dzieje. Podaje cały kod programu.

package moj;

import javafx.stage.FileChooser;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;

public class Main extends JFrame implements ActionListener {
    public Main(){
        super();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Aplikacja");

        JMenuBar menuBar = new JMenuBar();
        JMenu menu1 = new JMenu("Plik");
        JMenuItem menuItem1 = new JMenuItem("Zamknij");
        menuItem1.setActionCommand("Zamknij");
        menuItem1.addActionListener(this);

        menu1.add(menuItem1);
        menuBar.add(menu1);
        setJMenuBar(menuBar);

        setLayout(null);
        JButton Button1 = new JButton("txt");
        Button1.setSize(80, 30);
        Button1.setLocation(115, 55);
        add(Button1);

        setSize(320, 200);
        setVisible(true);
    }
        public void actionPerformed(ActionEvent e) {

            final FileChooser File = new FileChooser();
            JButton showFileButton = new JButton("Open File");
            showFileButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        Desktop.getDesktop().open(new File("U:\\Users\\******\\Desktop\\1.txt"));
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            });
            String cmd = e.getActionCommand();
            if ("Zamknij".equals(cmd)){
                dispose();
            }
        }

    public static void main(String[] args) {
	SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Main();
        }
    });
    }
}
0

Udało mi się rozwiązać problem. Dziękuje wszystkim za pomoc!
Podaje kod, może się komuś przyda:

package test;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.awt.Desktop;

public class Main extends JFrame implements ActionListener {
    public Main(){
        super("Aplikacja okienkowa");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JMenu menu1 = new JMenu("Plik");
        JMenuItem menu1item1 = new JMenuItem("Wybierz plik");
        JMenuItem menu1item2 = new JMenuItem("Zamknij");
        menu1item1.setActionCommand("chooseFile");
        menu1item2.setActionCommand("Zamknij");
        menu1item1.addActionListener(this);
        menu1item2.addActionListener(this);
        menu1.add(menu1item1);
        menu1.add(menu1item2);

        JMenuBar menuBar = new JMenuBar();
        menuBar.add(menu1);
        setJMenuBar(menuBar);

        setLayout(null);
        JButton button1 = new JButton("Kliknij");
        button1.setSize(80, 30);
        button1.setLocation(115, 55);
        button1.setActionCommand("chooseFile");
        button1.addActionListener(this);
        add(button1);

        setSize(320, 200);
        setVisible(true);

    }

    public void actionPerformed(ActionEvent e){
        String cmd = e.getActionCommand();
        if ("chooseFile".equals(cmd)) {
            JFileChooser fileChooser = new JFileChooser();
            int returnValue = fileChooser.showOpenDialog(null);
            if (returnValue == JFileChooser.APPROVE_OPTION) {
                File selectedFile = fileChooser.getSelectedFile();
                System.out.println(selectedFile.getName());
                // to jest ta linijka otwierania pliku File
                try {
                    Desktop.getDesktop().open(selectedFile);
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }else if ("Zamknij".equals(cmd)) {
            dispose();
        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Main();
            }
        });

    }
}

Temat można zamknąć!

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