मैं किसी अन्य प्रोग्राम के लिए एक साधारण जीयूआई लिखने की कोशिश कर रहा हूं। इसके लिए एक्लिप्स और प्लगइन 'विंडोबिल्डर' का उपयोग करना। मुझे अब तक यही मिला है:

import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;

public class LightGUI {

  protected Shell shell;
  private Text lichterEingabe;
  private Text befehleEingabe;
  private Text ipEingabe;
  private Text portEingabe;

 /**
  * Launch the application.
  * @param args
  */        
  
public static void main(String[] args) {
    try {
        LightGUI window = new LightGUI();
//PROBLEM APPARENTLY HERE: 
        window.open();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Open the window.
 */
public void open() {
    Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
//...OR HERE:
        if (!display.readAndDispatch()) {
                display.sleep();
        }   
    }
}

/**
 * Create contents of the window.
 */
protected void createContents() {
    shell = new Shell();
    shell.setBackground(SWTResourceManager.getColor(230, 230, 250));
    shell.setSize(701, 513);
    shell.setText("SWT Application");
    
    Label lichter = new Label(shell, SWT.NONE);
    lichter.setBackground(SWTResourceManager.getColor(230, 230, 250));
    lichter.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.NORMAL));
    lichter.setBounds(70, 71, 76, 21);
    lichter.setText("Lichter:");
    
    Label befehle = new Label(shell, SWT.NONE);
    befehle.setBackground(SWTResourceManager.getColor(230, 230, 250));
    befehle.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.NORMAL));
    befehle.setBounds(70, 130, 76, 22);
    befehle.setText("Befehle:");
    
    Label ip = new Label(shell, SWT.NONE);
    ip.setBackground(SWTResourceManager.getColor(230, 230, 250));
    ip.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.NORMAL));
    ip.setBounds(350, 71, 76, 21);
    ip.setText("IP:");
    
    Label port = new Label(shell, SWT.NONE);
    port.setBackground(SWTResourceManager.getColor(230, 230, 250));
    port.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.NORMAL));
    port.setBounds(350, 130, 76, 22);
    port.setText("Port:");
    
    lichterEingabe = new Text(shell, SWT.BORDER);
    lichterEingabe.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.NORMAL));
    lichterEingabe.setBounds(177, 71, 88, 28);
    
    befehleEingabe = new Text(shell, SWT.BORDER);
    befehleEingabe.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.NORMAL));
    befehleEingabe.setBounds(177, 124, 88, 28);
    
    ipEingabe = new Text(shell, SWT.BORDER);
    ipEingabe.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.NORMAL));
    ipEingabe.setBounds(456, 71, 88, 28);
    
    portEingabe = new Text(shell, SWT.BORDER);
    portEingabe.setFont(SWTResourceManager.getFont("Segoe UI", 11, SWT.NORMAL));
    portEingabe.setBounds(455, 124, 89, 28);
    
    Button btnNewButton = new Button(shell, SWT.NONE);
    btnNewButton.setForeground(SWTResourceManager.getColor(138, 43, 226));
    btnNewButton.setFont(SWTResourceManager.getFont("Segoe UI", 14, SWT.BOLD));
    btnNewButton.setBounds(417, 239, 120, 49);
    btnNewButton.setText("OK!");
    
    Label rueckmeldung = new Label(shell, SWT.NONE);
    rueckmeldung.setBackground(SWTResourceManager.getColor(230, 230, 250));
    rueckmeldung.setFont(SWTResourceManager.getFont("Segoe UI", 13, SWT.NORMAL));
    rueckmeldung.setBounds(70, 319, 134, 28);
    rueckmeldung.setText("Rueckmeldung:");
    
    StyledText styledText = new StyledText(shell, SWT.BORDER);
    styledText.setFont(SWTResourceManager.getFont("Segoe UI", 10, SWT.NORMAL));
    styledText.setEditable(false);
    styledText.setBounds(70, 353, 340, 96);
    
    
    btnNewButton.addListener(SWT.Selection, new Listener() {
          public void handleEvent(Event e) {
              switch (e.type) {
              case SWT.Selection:
                rueckmeldung.setText(null);
                if(lichterEingabe.getText()!=null && befehleEingabe.getText()!=null && ipEingabe.getText()!=null && portEingabe.getText()!=null){
                    new Steuerung(Integer.parseInt(lichterEingabe.getText()), Integer.parseInt(befehleEingabe.getText()));
                }
                break;
              }
            }
          });


    }
}

खिड़की दिखाई दे रही है और सभी लॉन्च करने के बाद। यह मेरे कोड का परिणाम है:

छोटी खिड़की

एक का मतलब चार टेक्स्टफील्ड में नंबर लिखना है (पांचवां, बड़ा एक त्रुटि संदेश प्रदर्शित करने के एकमात्र उद्देश्य के लिए है)। इन सभी को भरने के बाद OK बटन पर क्लिक करना है। उसके आधार पर, कुछ गणनाएँ पृष्ठभूमि में होंगी (गणना जो तब तक प्रासंगिक नहीं होगी जब तक कि यह काम न करे)।

हालाँकि, इसके बजाय जो होता है वह निम्नलिखित है: जैसे ही मैंने बटन पर क्लिक किया, मेरी विंडो अपने आप गायब हो जाती है। और ग्रहण कंसोल निम्न त्रुटि संदेश दिखाता है:

java.lang.IllegalArgumentException: Argument cannot be null
at org.eclipse.swt.SWT.error(SWT.java:4514)
at org.eclipse.swt.SWT.error(SWT.java:4448)
at org.eclipse.swt.SWT.error(SWT.java:4419)
at org.eclipse.swt.widgets.Widget.error(Widget.java:482)
at org.eclipse.swt.widgets.Label.setText(Label.java:403)
at LightGUI$1.handleEvent(LightGUI.java:126)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4418)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4236)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3824)
at LightGUI.open(LightGUI.java:49)
at LightGUI.main(LightGUI.java:34)

क्या कोई कुछ ऐसा देख सकता है जो मैं नहीं देख सकता? ये क्यों हो रहा है? कोई परिवर्तन दिखाई नहीं देना चाहिए, फिर भी कार्यक्रम ऐसा लगता है कि 'window.open ();' या display.readAndDispatch () किसी कारण से अशक्त हो जाता है?

समस्या वास्तव में क्या है, इस बारे में एक संकेत की सराहना की जाएगी क्योंकि मेरे पास मामूली विचार भी नहीं है।

0
Aye 3 मार्च 2017, 16:26

1 उत्तर

सबसे बढ़िया उत्तर

यह ऐसा है जैसे त्रुटि संदेश कहता है: Argument cannot be null

और आपके पास rueckmeldung.setText(null); है। इसके बजाय rueckmeldung.setText(""); का उपयोग करें, क्योंकि खाली लेबल में null मान नहीं, बल्कि एक खाली स्ट्रिंग होती है।

इसी कारण से इस पंक्ति में

if(lichterEingabe.getText()!=null && befehleEingabe.getText()!=null && ipEingabe.getText()!=null && portEingabe.getText()!=null)

आप नल-चेक को !...getText().isEmpty() से बदलना चाह सकते हैं।

1
QBrute 3 मार्च 2017, 16:38
वाह, मैं अब अविश्वसनीय रूप से बेवकूफ महसूस कर रहा हूँ। आपका बहुत बहुत धन्यवाद! आपने मुझे दिमाग खराब करने वाली नाकाबंदी के घंटों से बचाया। :)
 – 
Aye
3 मार्च 2017, 16:38