JavaFX 脚本似乎无法在其他计算机上运行

标签 java file-io javafx jnlp javafx-1

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

如果我在 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

最佳答案

It works perfectly fine if I compile it within Netbeans.

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

附录:文章Deploying JavaFX Applications 可能会有帮助.此外,一些较旧的 JWS 启动器可能无法正确使用 support class-path wildcards .

关于JavaFX 脚本似乎无法在其他计算机上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648706/

相关文章:

java - 将焦点设置在 JDateChooser 上

java - (Accès refusé) 访问被拒绝异常

JavaFX TextArea 从坐标获取插入符位置

JavaFX 8 - 自定义控件及其子控件

java - Dictionary of unknown size - 查找一个词是否在字典中

Java FTPCLient : upload file, 连接丢失后重新连接?

python - 如何操作 numpy.loadtxt 后的数据?

Android:从我的应用程序在默认应用程序中打开保存的文件

java - javafx中的路径拖动

java - 如何检查所有需要的订阅者是否完成了工作?