لا يبدو أن البرامج النصية Javafx تعمل على أجهزة الكمبيوتر الأخرى

StackOverflow https://stackoverflow.com/questions/3648706

سؤال

عندما أحضر تطبيقي إلى جهاز كمبيوتر آخر ، لا ينبغي أن يفتح الأزران إما متصفح ملف ، أو تأخذ مسار ملف لفتح ملف لا يعملان. أنا لا أفهم لماذا.

إنه يعمل بشكل جيد تمامًا إذا قمت بتجميعه داخل 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
هل كانت مفيدة؟

المحلول

إنه يعمل بشكل جيد تمامًا إذا قمت بتجميعه داخل NetBeans.

عادة ، يضع NetBeans نسخًا من المكتبات المطلوبة إلى جانب جرة في مجلد اسمه dist. يمكنك التحقق من أنك تضمن أي جرار مطلوبة أخرى عند نسخ الأشياء في مكان آخر.

إضافة: قد يكون هناك شيء مفيد في المقالة نشر تطبيقات Javafx. أيضًا ، قد لا يكون بعض قاذفات JWS أقدم بشكل صحيح دعم بطاقات البدل الممرات.

نصائح أخرى

كنت أواجه نفس المشكلة ولم أتمكن من إيجاد طريقة لإصلاح ذلك ، حتى فكرت في ما قيل في الإجابة السابقة حول المكتبات التي لا يتم تضمينها.

لم يكن لدي سوى 5 مكتبات لتبدأ بـ:

MySQL-Connector-Java.5.1.34-bin.jar Eclipselink (Stuff- 3 Libraries) JDK 1.8 (افتراضي)

ذهبت إلى Java 1.8 One ورأيت أن Javafx تضم في المكتبة ، لكنني قررت إضافة Javafx لمعرفة ما سيحدث على أي حال.

  1. انقر بزر الماوس الأيمن فوق المشروع وانقر فوق الخصائص.
  2. انقر فوق عنصر قائمة المكتبات ، على الجانب الأيسر.
  3. انقر فوق إضافة جرة/مجلد
  4. داخل الملف ، ذهبت إلى مكان Java JDK الحالي. بالنسبة لي كان ، C: Program Files java jdk1.8.0_40. ثم انقر فوق javafx-src.zip كمكتبة لإضافتها. انقر فوق فتح ، ثم انقر فوق "موافق" في قائمة الخصائص.
  5. بعد ذلك ، قم بتشغيل مشروع "نظيف وبناء".
  6. ثم قامت بتعبئة البرنامج كصورة فقط. حيث يتعين عليك نسخ دليل التطبيق بأكمله أو عليك إنشاء المثبت الخاص بك لنقل المجلد ، ثم وضع اختصار على التطبيق.

بعد تعبئته ذهب إلى الكمبيوتر الآخر وحاولته ، عملت مثل سحر !!!

آمل أن يساعد هذا شخص ما.

برمجة سعيدة!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top