Problema Java Swing

di il
3 risposte

Problema Java Swing

Ho un problema, quando clicco connetti sul cmd appare questo errore:
java.net.UnknownHostException: javax.swing.JTextField[,132,202,157x20,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@1164a05c,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=10,columnWidth=11,command=,horizontalAlignment=LEADING]
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at minecraft$2.actionPerformed(minecraft.java:82)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
        
Il codice è questo:

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.*;
import java.util.Arrays;
import java.io.*;
class ab {
	public static void main(String args[]) throws Exception{
		Socket a;
		String k = null;
		a = new Socket(k,7331);
		InputStream hsg = a.getInputStream();
		OutputStream hsg2 = a.getOutputStream();
		String arrr= (args.length == 0 ? k : args[0]) + "\n";
	}
}
public class minecraft {

	private JFrame frame;
	private JTextField textField;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					minecraft window = new minecraft();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public minecraft() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		
		JPanel panel = new JPanel();
		tabbedPane.addTab("New tab", null, panel, null);
		
		JPanel panel_1 = new JPanel();
		tabbedPane.addTab("New tab", null, panel_1, null);
		textField = new JTextField();
		textField.setColumns(10);
		JButton btnConnetti = new JButton("Connetti");
		btnConnetti.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String u = textField.toString();
				Socket a;
				JLabel label;
				try {
					int c;		
					a = new Socket(u,80);
					InputStream hsg = a.getInputStream();
					OutputStream hsg2 = a.getOutputStream();
					String[] args = null;
					String str = (args.length == 0 ? u : args[0]) + "\n";
					byte buf[] = str.getBytes();
					hsg2.write(buf);
					while ((c = hsg.read()) != -1 ){
						 System.out.println((char) c);
					}
					a.close();
					
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		
		JLabel lblIpWiiu = new JLabel("Ip wiiu");
		
		
		GroupLayout groupLayout = new GroupLayout(frame.getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.TRAILING)
				.addComponent(tabbedPane, GroupLayout.PREFERRED_SIZE, 434, GroupLayout.PREFERRED_SIZE)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(57)
					.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
						.addComponent(lblIpWiiu))
					.addGap(37)
					.addComponent(textField, GroupLayout.PREFERRED_SIZE, 157, GroupLayout.PREFERRED_SIZE)
					.addGap(18)
					.addComponent(btnConnetti)
					.addGap(46))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addComponent(tabbedPane, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED, 84, Short.MAX_VALUE)
					.addGap(50)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(btnConnetti)
						.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblIpWiiu))
					.addGap(36))
		);
		frame.getContentPane().setLayout(groupLayout);
	}
	
}
Mi potete Aiutare? Grazie

3 Risposte

  • Re: Problema Java Swing

    Il tuo codice sembra funzionare, anche se magari la connessione al server sarebbe meglio gestirla in un thread separato.

    L'errore che vedi e' dovuto al fatto che stai cercando di collegarti ad un host non riconosciuto. In base a quanto hai scritto, esci dalla gestione della comunicazione e stampi lo stack. Quindi il codice non e' andato in crash, ha fatto il suo dovere.
    Ricontrolla il nome del computer al quale stai cercando di collegarti. Se possibile, fai una verifica su localhost
  • Re: Problema Java Swing

    Al di là del fatto che il design non va affatto bene (stai instaurando una connessione tramite Socket all'interno del EDT e questo è pessimo), al di là dell'inutilità della classe "ab" (che oltre ad essere inutile è anche completamente errata), direi che l'errore evidente è all'interno dell'actionPerformed del pulsante:
    
    String u = textField.toString();
    

    Non stai prendendo il contenuto della JTextField, ma stai prendendo la rappresentazione stringa del componente (che è appunto quella "schifezza" che ti viene stampata subito sotto al messaggio "java.net.UnknownHostException:"). Per prendere il contenuto della JTextField devi usare il metodo getText():
    
    String u = textField.getText();
    

    Poi non si capisce a cosa possa servire dichiarare (e non istanziare, né usare) una JLabel all'interno del actionPerformed() del pulsante... ma vabbè.

    Anche questo codice (che per tua fortuna non viene eseguito a causa dell'eccezione precedente) è completamente errato e senza senso:
    
    String[] args = null;
    String str = (args.length == 0 ? u : args[0]) + "\n";
    

    Cioè prima dichiari un array e lo metti a null, poi cerchi addirittura di usarne il metodo length... che su un oggetto nullo farà schiantare l'applicazione con una bella NullPointerException... insomma, io butterei via tutto e cercherei di rifarlo con un po' più di senso...


    Ciao.
  • Re: Problema Java Swing

    Ok, grazie
Devi accedere o registrarti per scrivere nel forum
3 risposte