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

10 respostas
W
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;
		 }
		 
}

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

10 Respostas

Ataxexe

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?

W

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

Da esse erro na hora da execução.

Ataxexe
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.

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

public static void main (String[] args) {

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

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.

W

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á…

Ataxexe

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á…

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.

W

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…

W
package beatbox.server.com;

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


public class MusicServer{
	ArrayList<ObjectOutputStream> 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();}
		}
						
	}
	
	}

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)

RoxRicardo

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

W

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…

W

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

Criado 12 de setembro de 2013
Ultima resposta 14 de set. de 2013
Respostas 10
Participantes 3