2

当我将我的应用程序带到另一台计算机时,应该打开文件浏览器或采用文件路径打开文件的两个按钮都不起作用。我不明白为什么。

如果我在 Netbeans 中编译它,它工作得非常好。

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 ()
    }
}

和算法:

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
4

2 回答 2

3

如果我在 Netbeans 中编译它,它工作得非常好。

通常,NetBeans 将所需库的副本与您的 JAR 放在一个名为dist. 当您将内容复制到其他地方时,您可能会检查是否包含任何其他必需的 JAR。

附录:在Deploying JavaFX Applications一文中可能有一些帮助。此外,一些较旧的 JWS 启动器可能无法正确支持类路径通配符

于 2010-09-06T09:33:27.213 回答
1

我遇到了同样的问题并且无法找到解决此问题的方法,直到我想到了上一个答案中关于不包括库的内容。

一开始我只有 5 个库:

mysql-connector-java.5.1.34-bin.jar EclipseLink (stuff- 3 Libraries) JDK 1.8(Default)

我进入 Java 1.8 并看到 javafx 包含在库中,但我决定添加 javaFX 看看会发生什么。

  1. 右键单击该项目,然后单击属性。
  2. 单击左侧的库菜单项。
  3. 单击添加 Jar/文件夹
  4. 在文件选择器中,我进入了我当前的 java JDK 位置。对我来说,它是 C:\Program Files\Java\jdk1.8.0_40。然后单击 javafx-src.zip 作为要添加的库。单击打开,然后单击属性菜单上的确定。
  5. 在此之后,运行“清理和构建”项目。
  6. Then packaged the program as Image Only. Where you have to copy the entire app directory or you have to make your own installer to move the folder, and then place a shortcut to the application.

After being packaged went to the other computer and tried it, Worked like a charm!!!

I hope this helps someone.

Happy Programming!

于 2015-03-23T21:24:44.713 回答