Problemas com a parte do servidor de um programa [Resolvido]

[code]package beatbox.com;

import java.awt.;
import javax.swing.
;
import java.io.;
import javax.sound.midi.
;
import java.util.;
import java.awt.Event.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.;
import javax.swing.event.
;

public class BeatBoxFinal {

JFrame theFrame;
JPanel mainPanel;
JList incomingList;
JTextField userMessage;
ArrayList<JCheckBox> checkboxList;
int nextNum;
Vector<String> listVector = new Vector<String>();
String userName;
ObjectOutputStream out;
ObjectInputStream in;
HashMap<String, boolean[]> otherSeqsMap = new HashMap<String, boolean[]>();

Sequencer sequencer;
Sequence sequence;
Sequence mySequence  = null;
Track track;

String[] instrumentNames = {"Bass Drum" , "Closed Hi-Hat", "Open Hi-Hat", "Acoustic   Snare" , "Crash Cymbal","Hand Clap", "Hight Tom","Hi Bongo","Maracas","Whistle",   "Low Conga", "Cowbell", "Vibraslap", "Low-mid Tom", "High Agogo", "Open Hi Conga"};

int[] instruments = {35,42,46,38,49,39,50,60,70,72,64,56,58,47,67,63};


public static void main (String[] args) {

		new BeatBoxFinal().startUp(args[0]);
}

public void startUp(String name) {
	userName = name;
	try{
	Socket sock = new Socket("127.0.0.1", 4242);
	out = new ObjectOutputStream(sock.getOutputStream());
	in = new ObjectInputStream(sock.getInputStream());
	Thread remote = new Thread( new RemoteReader());
	remote.start();
	
	}catch(Exception ex) {
		System.out.println("couldn't connect - you'll have to play alone.");
	}
	
	setUpMidi();
	buildGUI();
}

public void buildGUI(){
	
	theFrame = new JFrame("Cyber BeatBox");
	BorderLayout layout = new BorderLayout();
	JPanel background = new JPanel(layout);
	background.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
	
	checkboxList = new ArrayList<JCheckBox>();
	
	Box buttonBox = new Box (BoxLayout.Y_AXIS);
	JButton start = new JButton ("Start");
	start.addActionListener(new MyStartListener());
	buttonBox.add(start);
	
	JButton stop = new JButton("Stop");
	stop.addActionListener(new MyStopListener());
	buttonBox.add(stop);
	
	JButton upTempo = new JButton("Tempo Up");
	upTempo.addActionListener(new MyUpTempoListener());
	buttonBox.add(upTempo);
	
	JButton downTempo = new JButton("Tempo Down");
	downTempo.addActionListener(new MyDownTempoListener());
	buttonBox.add(downTempo);
	
	JButton sendtIt = new JButton("sendIt");
	sendtIt.addActionListener(new MySendListener());
	buttonBox.add(sendtIt);
	
	userMessage = new JTextField();
	buttonBox.add(userMessage);
	
	incomingList = new JList();
	incomingList.addListSelectionListener(new MyListSelectionListener());
	incomingList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	JScrollPane theList = new JScrollPane(incomingList);
	buttonBox.add(theList);
	incomingList.setListData(listVector);
	
	Box nameBox = new Box (BoxLayout.Y_AXIS);
	for(int i = 0; i < 16; i++) {
		nameBox.add(new Label(instrumentNames[i]));
	}
	
	background.add(BorderLayout.EAST, buttonBox);
	background.add(BorderLayout.WEST, nameBox);
	
	theFrame.getContentPane().add(background);
	GridLayout grid = new GridLayout(16,16);
	grid.setVgap(1);
	grid.setHgap(2);
	mainPanel = new JPanel(grid);
	background.add(BorderLayout.CENTER, mainPanel);
	
	for(int i = 0; i < 256; i++) {
		JCheckBox c = new JCheckBox();	
		c.setSelected(false);
		checkboxList.add(c);
		mainPanel.add(c);
	}
	
	theFrame.setBounds(50,50,300,300);
	theFrame.pack();
	theFrame.setVisible(true);
	}

public void setUpMidi(){
	try{
		sequencer = MidiSystem.getSequencer();
		sequencer.open();
		sequence = new Sequence(Sequence.PPQ,4);
		track = sequence.createTrack();
		sequencer.setTempoInBPM(120);
	}catch(Exception e) {e.printStackTrace();}
}

	public void buildTrackAndStart(){
		ArrayList<Integer> trackList = null;
		sequence.deleteTrack (track);
		track = sequence.createTrack();
		
		for (int i = 0; i <16; i++){
			
			trackList = new ArrayList<Integer>();
			
			for(int j = 0; j < 16; j++){
				JCheckBox jc = (JCheckBox) checkboxList.get(j +(16*i));
				if(jc.isSelected()){
					int key = instruments[i];
					trackList.add(new Integer(key));
				}else{
					trackList.add(null);
				}
			}
			makeTracks(trackList);
		}
		track.add(makeEvent(192,9,1,0,15));
		try{
			sequencer.setSequence(sequence);
			sequencer.setLoopCount(sequencer.LOOP_CONTINUOUSLY);
			sequencer.start();
			sequencer.setTempoInBPM(120);
		}catch(Exception e) {e.printStackTrace(); }
	}
	
	 public class MyStartListener implements ActionListener {
		 public void actionPerformed(ActionEvent  a) {
			 buildTrackAndStart();
		 }
	 }
	 
	 public class MyStopListener implements ActionListener{
		 public void actionPerformed(ActionEvent a) {
			 sequencer.stop();
		 }
	 }
	 
	 public class MyUpTempoListener implements ActionListener {
		 public void actionPerformed(ActionEvent a) {
			 float tempoFactor = sequencer.getTempoFactor();
			 sequencer.setTempoFactor((float) (tempoFactor * 1.03));
		 }
	 }
	 public class MyDownTempoListener implements ActionListener{
		 public void actionPerformed(ActionEvent a) {
			 float tempoFactor = sequencer.getTempoFactor();
			sequencer.setTempoFactor((float)(tempoFactor *97));
		 }
	 }
	 
	 public class MySendListener implements ActionListener{
	 public void actionPerformed(ActionEvent a) {
		 boolean[] checkboxState = new boolean[256];
		 for (int i = 0; i <256; i++) {
			 JCheckBox check = (JCheckBox) checkboxList.get(i);
			 if(check.isSelected()){
				 checkboxState[i] = true;
				 
				}
			}
		 String messageToSend = null;
		 try{
			 out.writeObject(userName + nextNum++ + ": " + userMessage.getText());
		     out.writeObject(checkboxState);
		 } catch(Exception ex) {
			 System.out.println("Sorry dude. Could not send it to the server.");
		 }
	 }
	 
	 }
	 
	 public class MyListSelectionListener implements ListSelectionListener {
		 public void valueChanged(ListSelectionEvent le) {
			 if(!le.getValueIsAdjusting()) {
			 String selected = (String) incomingList.getSelectedValue();
			 if(selected != null) {
			 boolean[] selectedState = (boolean[]) otherSeqsMap.get(selected);
	         changeSequence(selectedState);
	         sequencer.stop();
	         buildTrackAndStart();
			 }
		 }
		     
		 }
		 
	 }
	 
	 
	 public class RemoteReader implements Runnable {
		 boolean [] checkboxState = null;
		 String nameToShow = null;
		 Object obj = null;
		 public void run() {
			 try{
				 while((obj= in.readObject()) != null) {
					 System.out.println("got an object from server");
					 System.out.println(obj.getClass());
					 String nameToShow = (String) obj;
					 checkboxState = (boolean[]) in.readObject();
					 otherSeqsMap.put(nameToShow,checkboxState);
					 listVector.add(nameToShow);
					 incomingList.setListData(listVector);
				 }
			 
			 }catch (Exception ex) {ex.printStackTrace(); }
				 
		 }
		 
	 }
	 
	 public class MyPlayMineListener implements ActionListener {
		 public void actionPerformed(ActionEvent a) {
			 if(mySequence != null) {
				 sequence = mySequence;
			 }
		 }
	 }
	 
	 public void changeSequence(boolean[] checkboxState) {
		 for(int i = 0; i < 256; i++) {
			 JCheckBox check = (JCheckBox) checkboxList.get(i);
			 if(checkboxState[i]) {
				 check.setSelected(true);
			 }else{
				 check.setSelected(false);
			 }
		 }
	 }
	 
	 
	 public void  makeTracks(ArrayList list) {
		 Iterator it = list.iterator();
		 for (int i= 0; i < 16; i ++) {
			 Integer num = (Integer) it.next();
			 if(num != null) {
				 int numKey = num.intValue();
				 track.add(makeEvent(144,9,numKey,100, i));
				 track.add(makeEvent(128,9,numKey,100, i +1));
				 
			 }
		 }
		 
	 }
	 
	 public  MidiEvent makeEvent(int comd, int chan, int one , int two, int tick) {
		 MidiEvent event = null;
		 try{
			 ShortMessage a = new ShortMessage();
			 a.setMessage(comd,chan,one,two);
			 event = new MidiEvent(a ,  tick);
		 }catch(Exception e) {}
		 return event;
	 }

}

[/code]

O que tem de errado nesse código? Eu não consigo rodar ele. Me ajudem, por favor!

Por que você não consegue rodar?
Dá algum erro de compilação? E de execução?
O que você já tentou fazer pra resolver?

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0
at beatbox.com.BeatBoxFinal.main(BeatBoxFinal.java:46)

Da esse erro na hora da execução.

[quote=wesleyalves1993]Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0
at beatbox.com.BeatBoxFinal.main(BeatBoxFinal.java:46)

Da esse erro na hora da execução. [/quote]

E você já pesquisou sobre esse erro? Já viu o que tem no código?

[code]public static void main (String[] args) {

new BeatBoxFinal().startUp(args[0]);
}
[/code]

Você está passando o argumento para o programa? (Veja que ele utiliza o primeiro argumento para enviar ao método startUp). Eu tenho certeza que não, pois o erro ArrayIndexOutOfBoundsException indica que não existe o elemento “x” no array. No caso foi o elemento 0, ou seja, o array está vazio.

Não custa nada você pesquisar no Google a exceção que ocorreu para ver do que se trata o erro.

Infelizmente não encontrei a solução. E esse código, ele ta no livro que eu citei é erro do livro mesmo. No livro a forma que dizem é que está certo.

Mas não está…

[quote=wesleyalves1993]Infelizmente não encontrei a solução. E esse código, ele ta no livro que eu citei é erro do livro mesmo. No livro a forma que dizem é que está certo.

Mas não está…[/quote]

Você leu o que eu escrevi? Você leu o código fonte? Você viu que precisa passar um argumento na hora de chamar o programa? Você executou “java beatbox.com.BeatBoxFinal QUALQUER-COISA-AQUI” para não dar o erro?

Eu rodei esse programa aqui normalmente apenas passando um parâmetro, conforme eu mencionei acima. O código está certo, você quem não soube usá-lo.

Pelo menos tente ler o código e ver o que o programa faz com esse argumento que você passa pela linha de comando.

Problema resolvido!

Fiz o seguinte:

public class BeatBoxFinal {
	
	private static final String pracomecar = null;


public static void main (String[] args) {

			
			new BeatBoxFinal().startUp(pracomecar);
	}

Obrigado cara! Vou te incomodar só mais uma vez, se você poder me ajudar te agradeço em dobro!

To com problema na parte do servidor desse mesmo beatbox, vou postar o código aqui…

[code]package beatbox.server.com;

import java.io.;
import java.net.
;
import java.util.*;

public class MusicServer{
ArrayList clientOutputStreams;

public static void main (String[] args) {
	new MusicServer().go();
}

public class ClientHandler implements Runnable{
	ObjectInputStream in;
	Socket clientSocket;


public  ClientHandler(Socket socket) {
try{
	clientSocket = socket;
	in = new ObjectInputStream(clientSocket.getInputStream());

}catch(Exception ex) {ex.printStackTrace();}

}

public void run() {
	Object o2 = null;
	Object o1 = null;
	try{
		while((o1 = in.readObject()) != null){
			o2 = in.readObject();
			
			System.out.println("read two objects");
			
			tellEveryone(o1,o2);
		}
		
	}catch(Exception ex) {ex.printStackTrace();}
}

}

public void go() {
	clientOutputStreams = new ArrayList<ObjectOutputStream>();
	
	try{
		ServerSocket  serverSock = new ServerSocket(4242);
		
		while (true) {
			
			Socket clientSocket = serverSock.accept();
			ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream());
			clientOutputStreams.add(out);
			
			Thread t = new Thread(new ClientHandler(clientSocket));
			t.start();
			
			System.out.println("go a connection");
			
		}
		
	}catch(Exception ex){
		ex.printStackTrace();
	}
	
}


public void tellEveryone(Object one, Object two){
	Iterator it = clientOutputStreams.iterator();
	while(it.hasNext()){
		try{
			ObjectOutputStream out = (ObjectOutputStream) it.next();
			out.writeObject(one);
			out.writeObject(two);
		}catch(Exception ex) {ex.printStackTrace();}
	}
					
}

}

[/code]

Fiz um novo projeto tal mas não consigo rodar esse código. É o cliente servidor do beatbox.

O erro é esse:

at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.(Unknown Source)
at java.net.ServerSocket.(Unknown Source)
at beatbox.server.com.MusicServer.go(MusicServer.java:49)
at beatbox.server.com.MusicServer.main(MusicServer.java:12)

Quando for postar códigos, utilize a tag para que fique legível, o @Ataxexe é um santo de ter ti ajudado.

Beleza, desculpe além de ser novato com java também sou novato no fórum. Mas gostaria que me ajudassem com mais esse código por gentileza…

To precisando de uma ajuda na BeatBox na parte do server agora. Editei o post e agora está como code.