2016-11-25 1 views
0

내 클라이언트 클래스가 서버로부터 메시지를 받고 UDP 네트워킹을 사용하여 서버에 메시지를 보내지 만 서버 클래스의 입력 및 출력을 "Chit-chat"창에 표시하려고합니다. 그러나 나는 그것을 어떻게하는지 모른다. 또한 생성자에서 시작 (Client.class)을 전달하려고 시도했지만 오류가 발생했습니다.javaFX 프로그램 시작시 오류가 발생했습니다

public class Client extends Application{ 

Thread send; 
Thread accept; 
DatagramPacket pack; 
DatagramSocket sock; 
private String str[]; 
String name, sname; 
int listeningPort; 
InetAddress server_ip; 
String sender; 

public Parent createContent(){ 
    ScrollPane sp = new ScrollPane(); 
    TextFlow textFlow = new TextFlow(); 
    textFlow.setPadding(new Insets(10)); 
    textFlow.setLineSpacing(10); 
    TextField textField = new TextField(); 
    textField.setPrefSize(50,30); 
    Button button = new Button("Send"); 
    button.setPrefSize(80,30); 
    Button button2 = new Button("Start"); 
    button2.setPrefSize(50,30); 
    VBox container = new VBox(); 
    VBox box = new VBox(); 
    box.getChildren().addAll(sp,textFlow); 
    container.setPadding(new Insets(10)); 
    container.getChildren().addAll(box, new HBox(textField, button,button2)); 
    VBox.setVgrow(sp, Priority.ALWAYS); 
    VBox.setVgrow(textFlow, Priority.ALWAYS); 
    return container; 
} 

public void playSound() { 
    String gongFile = "C:\\Users\\HP\\IdeaProjects\\FirstGUI\\src\\sample\\Really\\Small-bell-jingling.wav"; 
    InputStream in = null; 
    try { 
     in = new FileInputStream(gongFile); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    AudioStream audioStream = null; 
    try { 
     audioStream = new AudioStream(in); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    AudioPlayer.player.start(audioStream); 
} 
public void start(Stage stage){ 
    Parent p=createContent(); 
    Scene scene = new Scene(p, 400, 300); 
    stage.setScene(scene); 
    stage.setTitle("Chit-Chat"); 
    stage.show(); 
} 
public Client(String s[]) throws UnsupportedEncodingException, IOException { 
    this.str = s; 
    name = str[0]; 
    listeningPort = Integer.parseInt(str[1]); 
    server_ip = InetAddress.getByName(str[2]); 
    sname = str[3]; 
    sock = new DatagramSocket(); 
    byte[] data = new byte[1024]; 
    data = String.valueOf(str2).getBytes(); 
    pack = new DatagramPacket(data, data.length, server_ip, 5050); 
    sock.send(pack); 
    launch(Client.class); 
    send = new Thread() { 

     public void run() { 
      DatagramSocket sock = null; 
      try { 
       sock = new DatagramSocket(); 
      } catch (SocketException ex) { 
       Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      while (true) { 
       InetAddress host = server_ip; 
       try { 
        Scanner input = new Scanner(System.in); 
        String in = input.nextLine(); 
        byte[] data = new byte[1024]; 
        data = String.valueOf(str).getBytes(); 
        DatagramPacket sendPack = new DatagramPacket(data, data.length); 
        sendPack.setPort(5050); 
        sendPack.setAddress(host); 
        sock.send(sendPack); 
       } catch (Exception e) { 
        System.out.println(e); 
       } 
      } 
     } 

    }; 
    send.start(); 
    accept = new Thread() { 

     public void run() { 
      try { 
       sock = new DatagramSocket(listeningPort); 
      } catch (SocketException e) { 
       e.printStackTrace(); 
      } 
      while (true) { 
       byte[] data = new byte[1000]; 
       pack = new DatagramPacket(data, data.length); 
       try { 
        sock.receive(pack); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       String incoming = null; 
       try { 
        incoming = new String(data, "UTF-8"); 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } 
       System.out.println(incoming); 

      } 
     } 
    }; 
    accept.start(); 
} 

public static void main(String[] args) throws IOException { 
    new Client(args); 
} 

} 

오류 :

Exception in Application constructor 
Exception in thread "main" java.lang.RuntimeException: Unable to construct Application instance: class sample.Client 
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:907) 
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NoSuchMethodException: sample.Client.<init>() 
at java.lang.Class.getConstructor0(Class.java:3082) 
at java.lang.Class.getConstructor(Class.java:1825) 
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:818) 
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
+0

그래서이 대신 답변의 의견이지만, 원인 : java.lang.NoSuchMethodException : sample.Client. ()'은 프레임 워크가 호출 할 인수가없는 (즉, 기본) 생성자를 찾고 있고 제공하지 않았다는 것을 의미합니다. –

+2

예외가 아주 분명합니다. _'com.sun.javafx.application.LauncherImpl'_가'Client()'를 찾고 있는데 그것을 찾지 못했습니다. –

+0

launch (Client.class, "my client")에서 String 인수를 추가했지만 여전히 변경되지 않았습니다. – IAmBlake

답변

1

전화 대신 new Client(args)launch(args)start() 방법 생성자에서 모든 코드를 이동합니다. getParameters() 메소드를 사용하여 명령 행 매개 변수에 액세스 할 수 있습니다. Application documentation은 JavaFX 응용 프로그램의 수명주기를 설명합니다.

테스트되지 않음 (이 질문에 단지 너무 많은 관련성이없는 물질이다), 그러나 이것은 생각 : '내가 자바 FX를 모르는

public class Client extends Application{ 

    Thread send; 
    Thread accept; 
    DatagramPacket pack; 
    DatagramSocket sock; 
    private List<String> str; 
    String name, sname; 
    int listeningPort; 
    InetAddress server_ip; 
    String sender; 

    public Parent createContent(){ 
     ScrollPane sp = new ScrollPane(); 
     TextFlow textFlow = new TextFlow(); 
     textFlow.setPadding(new Insets(10)); 
     textFlow.setLineSpacing(10); 
     TextField textField = new TextField(); 
     textField.setPrefSize(50,30); 
     Button button = new Button("Send"); 
     button.setPrefSize(80,30); 
     Button button2 = new Button("Start"); 
     button2.setPrefSize(50,30); 
     VBox container = new VBox(); 
     VBox box = new VBox(); 
     box.getChildren().addAll(sp,textFlow); 
     container.setPadding(new Insets(10)); 
     container.getChildren().addAll(box, new HBox(textField, button,button2)); 
     VBox.setVgrow(sp, Priority.ALWAYS); 
     VBox.setVgrow(textFlow, Priority.ALWAYS); 
     return container; 
    } 

    public void playSound() { 
     String gongFile = "C:\\Users\\HP\\IdeaProjects\\FirstGUI\\src\\sample\\Really\\Small-bell-jingling.wav"; 
     InputStream in = null; 
     try { 
      in = new FileInputStream(gongFile); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     AudioStream audioStream = null; 
     try { 
      audioStream = new AudioStream(in); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     AudioPlayer.player.start(audioStream); 
    } 
    public void start(Stage stage) throws Exception { 

     str=getParameters().getRaw(); 

     name = str.get(0); 
     listeningPort = Integer.parseInt(str.get(1)); 
     server_ip = InetAddress.getByName(str.get(2)); 
     sname = str.get(3); 
     sock = new DatagramSocket(); 
     byte[] data = new byte[1024]; 
     data = String.valueOf(str2).getBytes(); 
     pack = new DatagramPacket(data, data.length, server_ip, 5050); 
     sock.send(pack); 

     send = new Thread() { 

      public void run() { 
       DatagramSocket sock = null; 
       try { 
        sock = new DatagramSocket(); 
       } catch (SocketException ex) { 
        Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
       } 
       while (true) { 
        InetAddress host = server_ip; 
        try { 
         Scanner input = new Scanner(System.in); 
         String in = input.nextLine(); 
         byte[] data = new byte[1024]; 
         data = String.valueOf(str).getBytes(); 
         DatagramPacket sendPack = new DatagramPacket(data, data.length); 
         sendPack.setPort(5050); 
         sendPack.setAddress(host); 
         sock.send(sendPack); 
        } catch (Exception e) { 
         System.out.println(e); 
        } 
       } 
      } 

     }; 
     send.start(); 
     accept = new Thread() { 

      public void run() { 
       try { 
        sock = new DatagramSocket(listeningPort); 
       } catch (SocketException e) { 
        e.printStackTrace(); 
       } 
       while (true) { 
        byte[] data = new byte[1000]; 
        pack = new DatagramPacket(data, data.length); 
        try { 
         sock.receive(pack); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        String incoming = null; 
        try { 
         incoming = new String(data, "UTF-8"); 
        } catch (UnsupportedEncodingException e) { 
         e.printStackTrace(); 
        } 
        System.out.println(incoming); 

       } 
      } 
     }; 

     accept.start(); 
     Parent p=createContent(); 
     Scene scene = new Scene(p, 400, 300); 
     stage.setScene(scene); 
     stage.setTitle("Chit-Chat"); 
     stage.show(); 
    } 


    public static void main(String[] args) throws IOException { 
     launch(args); 
    } 

} 
+0

이제 작동합니다 ... 덕분에 많이 : D – IAmBlake

+1

@IAmBlake 올바른 답을 표시하십시오. 이제 13 가지 질문을하고 올바른 답을 하나만 표시하지 마십시오. 계속 그렇게하면 더 많은 답변을 얻지 못할 것입니다. –

+0

알았어,이 정보를 주셔서 감사합니다. – IAmBlake

관련 문제