When I bring my app to another computer the two buttons that should either open a file browser, or take in a file path to open a file both don't work. I don't understand why.
It works perfectly fine if I compile it within 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 ()
}
}
And the Algorithm:
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