Javafx脚本似乎在其他计算机上不起作用
题
当我将应用程序带到另一台计算机时,应该打开文件浏览器的两个按钮,或者介绍文件路径以打开文件都无法正常工作。我不明白为什么。
如果我在Netbean中进行编译,它的工作正常。
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
解决方案
如果我在Netbean中进行编译,它的工作正常。
通常,Netbeans将所需库的副本与您的罐子旁边的副本放在名为的文件夹中 dist
. 。您可能会检查您在其他地方复制内容时是否包括其他必需的罐子。
附录:文章可能有帮助 部署JAVAFX应用程序. 。另外,一些较旧的JW启动器可能无法正确 支持课程通配符.
其他提示
我遇到了同样的问题,无法找到解决此问题的方法,直到我考虑了上一个关于图书馆的答案中所说的内容。
我只有5个图书馆:
mysql-connector-java.5.1.34-bin.jar eclipselink(sutt-3库)JDK 1.8(默认)
我进入了Java 1.8,看到Javafx在库中包括,但我决定添加Javafx,看看无论如何都会发生什么。
- 右键单击项目,然后单击“属性”。
- 单击左侧的库菜单项。
- 单击添加jar/文件夹
- 在文件选择器中,我进入了当前的Java JDK位置。对于我的是,c: program文件 java jdk1.8.0_40。然后单击javafx-src.zip作为添加的库。单击“打开”,然后单击“属性”菜单上的确定。
- 此后,运行“干净和构建”项目。
- 然后将程序仅作为图像打包。您必须复制整个应用程序目录,或者必须制作自己的安装程序才能移动文件夹,然后将快捷方式放置到应用程序中。
包装后,去了另一台计算机尝试,就像魅力一样工作!!!
我希望这可以帮助别人。
愉快的节目!
不隶属于 StackOverflow