Frage

Als ich bringe meine app auf einem anderen Computer die beiden Tasten, die entweder einen Datei-Browser geöffnet werden sollen, oder in einem Dateipfad nehmen eine Datei zu öffnen beide nicht funktionieren. Ich verstehe nicht, warum.

Es funktioniert völlig in Ordnung, wenn ich es in Netbeans kompilieren.

package maxsublistsum;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import java.io.BufferedReader;
import java.io.FileReader;
import java.lang.Exception;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import javafx.scene.control.TextBox;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.control.ListView;
import javafx.scene.control.ScrollView;
import javafx.scene.control.Button;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.paint.Color;
import javafx.scene.effect.DropShadow;
import javafx.scene.Node;
import javafx.scene.input.MouseEvent;
import java.io.File;
import java.io.FileNotFoundException;
/**
 * @author
 */

public class Main{
    var originalList: Integer[];
    var maxSublistSum = subListCalculator{};


    public-read def Start_Index: Label = Label {
        width: 27.0
        height: 27.0
        text: "Start"
    }

    public-read def StartIndexText: TextBox = TextBox {
        text: bind maxSublistSum.maxStartIndex.toString()
        editable: false
    }

    public-read def StartIndexBox: HBox = HBox {
        layoutX: 251.0
        layoutY: 102.0
        width: 140.0
        height: 21.0
        content: [ Start_Index, StartIndexText, ]
        spacing: 4.0
    }

    public-read def End_Index: Label = Label {
        width: 30.0
        height: 27.0
        text: "End"
    }

    public-read def EndIndexText: TextBox = TextBox {
        text: bind maxSublistSum.maxEndIndex.toString()
        editable: false
    }

    public-read def EndIndexBox: HBox = HBox {
        layoutX: 252.0
        layoutY: 157.0
        width: 121.0
        height: 21.0
        content: [ End_Index, EndIndexText, ]
        spacing: 10.0
    }

    public-read def Sum: Label = Label {
        width: 27.0
        height: 27.0
        text: "Sum"
    }

    public-read def SumText: TextBox = TextBox {
        text: bind maxSublistSum.maxSum.toString()
        editable: false
    }

    public-read def SumBox: HBox = HBox {
        layoutX: 258.0
        layoutY: 45.0
        width: 172.0
        height: 21.0
        content: [ Sum, SumText, ]
        spacing: 6.0
    }

    public-read def results_box: VBox = VBox {
        layoutX: 185.0
        layoutY: 140.0
        width: 120.0
        height: 80.0
        content: [ StartIndexBox, EndIndexBox, SumBox, ]
        spacing: 6.0
    }

    public-read def sublist_view: ListView = ListView {
        width: 150.0
        height: 170.0
        items: bind maxSublistSum.maxSubList
    }

    public-read def sublist_scroll: ScrollView = ScrollView {
        layoutX: 320.0
        layoutY: 140.0
        width: 150.0
        height: 170.0
        node: sublist_view
        hbarPolicy: javafx.scene.control.ScrollBarPolicy.NEVER
        vbarPolicy: javafx.scene.control.ScrollBarPolicy.ALWAYS
    }

    public-read def file_textBox: TextBox = TextBox{
        layoutX: 100.0
        layoutY: 98.0
        width: 160.0
        editable: true
        text: "Enter path to file here:"
        onMouseClicked: function(e: MouseEvent): Void {
            file_textBox.text = "";
        }

    }

    public-read def calculate_Button: Button = Button {
        layoutX: 320.0
        layoutY: 98.0
        text: "Calculate Max Sub List Sum"
        onMouseClicked: function(e: MouseEvent): Void{
            try {readFile(new File(file_textBox.text))}
            catch (exception:FileNotFoundException) {
                Stage{
                title: "File Error!"
                scene: Scene {
                    width: 175.0
                    height: 40.0
                    content: Label {
                        text:"File Not Found Error!"
                        font: TitleFont
                        }
                    }
                }
            }
        }


    }

    public-read def select_file: Button = Button {
        layoutX: 10.0
        layoutY: 98.0
        text: "File Browser"
        onMouseClicked: function(e: MouseEvent): Void {
            select_fileAction();
    }

    }

    public-read def original_listView: ListView = ListView {
        width: 150.0
        height: 170.0
        items: bind listView2Items
    }

    public-read def original_scroll: ScrollView = ScrollView {
        layoutX: 10.0
        layoutY: 140.0
        width: 150.0
        height: 170.0
        node: original_listView
        hbarPolicy: javafx.scene.control.ScrollBarPolicy.NEVER
    }

    public-read def Original_List: Label = Label {
        layoutX: 50.0
        layoutY: 118.0
        width: 60.0
        text: "Original List"
    }

    public-read def Sub_List: Label = Label {
        layoutX: 370.0
        layoutY: 118.0
        width: 40.0
        text: "Sub-List"
    }

    public-read def Help_Text: Text = Text {
        layoutX: 90.0
        layoutY: 75.0
        wrappingWidth: 300.0
        x: 0.0
        content: "This program accepts files with .txt and .dat file extensions "
        "where the intergers of a list are provided on seperate lines."
    }

    public-read def TitleFont: Font = Font {
        size: 22.0
        embolden: true
    }

    public-read def blue: Color = Color {
        red: 0.4
        green: 0.6
        blue: 1.0
    }

    public-read def dropShadow: DropShadow = DropShadow {
        color: blue
        width: 10.0
        height: 10.0
    }

    public-read def Title: Label = Label {
        layoutX: 20.0
        layoutY: 20.0
        width: 440.0
        effect: dropShadow
        text: "Determine the Sub-List with the Maximum Sum!"
        font: TitleFont
    }

    public-read def My_Name: Label = Label {
        layoutX: 165.0
        layoutY: 261.0
        effect: dropShadow
        text: "Author"
        font: TitleFont
    }

    public-read def scene: Scene = Scene {
        width: 480.0
        height: 320.0
        content: getDesignRootNodes ()
    }

    public-read def currentState: org.netbeans.javafx.design.DesignState = 
        org.netbeans.javafx.design.DesignState {
    }

    public function getDesignRootNodes (): Node[] {
        [ calculate_Button, file_textBox, results_box, sublist_scroll, select_file, 
        original_scroll, Original_List, Sub_List, Help_Text, My_Name, Title, ]
    }

    public function getDesignScene (): Scene {
        scene
    }

    var listView2Items: Object[] = bind originalList;

    function select_fileAction(): Void {
        var extensions = [".txt", ".dat"];
        var fileChooser = new JFileChooser();
        fileChooser.addChoosableFileFilter(
            FileFilter{
                override function getDescription(){"Data {extensions.toString()}"}
                override function accept(file:File){
                    if (file.isDirectory()){return true}
                    var name = file.getName().toLowerCase();
                    for (extension in extensions){
                        if (name.endsWith(extension)){
                            return true;
                        }
                    }

                    return false
                }

            });
        originalList = [];
        var returnVal = fileChooser.showOpenDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION){};
        readFile(fileChooser.getSelectedFile());
    }
    function readFile(file:File): Void {

        var reader = new BufferedReader(
                            new FileReader (
                                    file ) );
        while (true){
            var line = reader.readLine();
            if (line == null){break}
            try {
                var currentInteger: Integer = java.lang.Integer.parseInt(line);
                insert currentInteger into originalList;
            }
            catch (e:Exception){
                Stage{
                title: "File Error!"
                scene: Scene {
                    width: 150.0
                    height: 40.0
                    content: Label {
                        text:"File Input Error!"
                        font: TitleFont
                        }
                    }
                }
                originalList = [];
                break;
            }
        }
        maxSublistSum.updateList(originalList);
    }
}

function run (): Void {
    var design = Main {};

    javafx.stage.Stage {

        title: "Main"
        scene: design.getDesignScene ()
    }
}

Und der Algorithmus:

public class subListCalculator {

public-read var maxStartIndex: Integer = -1;
public-read var maxEndIndex: Integer = -1;
public-read var maxSum: Integer = 0;
public-read var maxSubList: Integer[];
var currentSubList: Integer[];
var currentSum: Integer = 0;
var currentStartIndex: Integer = -1;
public var list: Integer[];


function resetValues(): Void{
    maxStartIndex = -1;
    maxEndIndex = -1;
    maxSum = 0;
    currentSubList = [];
    maxSubList = [];
    currentSum = 0;
    currentStartIndex = -1;
}

public function updateList (newList:Integer[]): Void{
    resetValues();
    list = newList;
    var lastIndex = list.size() - 1;

    for (i in [0..lastIndex]) {
        var currentValue = list[i];

        if (currentSum > 0) {
            currentSum = currentSum + currentValue;
            if (currentStartIndex == -1) { currentStartIndex = i }
            insert currentValue into currentSubList;
        }else {
            currentSum = currentValue;
            currentStartIndex = i;
            currentSubList = [currentValue];
        }
        if (currentSum > maxSum){
            maxSum = currentSum;
            maxEndIndex = i;
            maxStartIndex = currentStartIndex;
            maxSubList = currentSubList
        }
    }
}

}//End of class
War es hilfreich?

Lösung

  

Es funktioniert völlig in Ordnung, wenn ich es in Netbeans kompilieren.

Normalerweise NetBeans legen Kopien der erforderlichen Bibliotheken neben Ihrer JAR in einem Ordner mit dem Namen dist. Sie könnten überprüfen, ob Sie alle anderen erforderlichen JAR-Dateien sind auch dann, wenn Sie die Dinge an anderer Stelle kopieren.

Nachtrag: Es ist etwas hilfreich in dem Artikel sein kann Bereitstellen von JavaFX-Anwendungen . Auch einige ältere JWS Werfer möglicherweise nicht richtig Unterstützung Klasse-Pfad Platzhalter .

Andere Tipps

Ich habe das gleiche Problem mit und kann nicht einen Weg finden, dies zu beheben, bis ich darüber nachdachte, was in der vorherige Antwort gesagt wurde über Bibliotheken nicht enthalten ist.

Ich hatte nur 5 Bibliotheken beginnen:

mysql-connector-java.5.1.34-bin.jar Eclipse (Stuff- 3 Libraries) JDK 1.8 (Standard)

Ich ging in die Java 1.8 ein und sieht, dass JavaFX in der Bibliothek ist, einschließlich, aber ich beschloss JavaFX hinzufügen, um zu sehen, was sowieso geschehen würde.

  1. Rechtsklick auf das Projekt und klicken Sie auf Eigenschaften.
  2. Klicken Sie auf die Bibliotheken Menüpunkt auf der linken Seite.
  3. Klicken Sie auf Hinzufügen Jar / Ordner
  4. Innerhalb der Dateiauswahl, ging ich in meinen aktuellen Java JDK Platz. Denn meine es war, C: \ Programme \ Java \ jdk1.8.0_40. Klicken Sie dann auf die javafx-src.zip als die Bibliothek hinzuzufügen. Klicken Sie auf Öffnen und dann auf OK auf das Eigenschaftenmenü.
  5. Nach diesem Run 'Clean and Build' Projekt.
  6. wird nur das Programm als Bild verpackt. Wo haben Sie das gesamte App-Verzeichnis kopieren oder Sie müssen Ihren eigenen Installer machen, um den Ordner zu verschieben, und dann eine Verknüpfung zur Anwendung stellen.

Nach dem Verpacken ging an den anderen Computer und versuchte es, Arbeitete wie ein Charme !!!

Ich hoffe, das jemand hilft.

Happy Programmierung!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top