Zdravím všecky,
mám takový menší problém. Píšu applet pro ethernetový modul XPort, ve kterém chci zobrazovat určité měřené hodnoty. Vytvořil jsem soubory: Xport.java - ten už byl hotový, jenom vytváří socket, načítá a odesílá data
Sensor.java - tělo appletu, které volá GUI
Gui.java - ten přepočítává a do labelů vypisuje hodnoty, v něm je právě problém
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.util.*;
public class Gui extends Panel implements Runnable
{
private Thread mTimer;
private Label[][] mLabels;
private String savedData;
private Xport mXport;
public Gui(Xport xport)
{
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(5,5,5,5);
setBackground(java.awt.Color.lightGray);
setSize(328, 446);
mXport = xport;
InitializeLabels(c);
mTimer = new Thread(this);
mTimer.start();
}
private void InitializeLabels(GridBagConstraints c)
{
mLabels = new Label[3][3];
for(int x = 0; x < 3; x++)
{
//projedeme misto a nalabelujeme
for(int y = 0; y < 3; y++)
{
mLabels[x][y] = new Label();
add(mLabels[x][y], c);
}
// nove labely do GUI
switch(x) {
case 0: addLabel("Napeti: ", mLabels[x][0], 0, 2*x, c);
break;
case 1: addLabel("NaPiC1: ", mLabels[x][0], 0, 2*x, c);
break;
case 2: addLabel("NaPiC2: ", mLabels[x][0], 0, 2*x, c);
break;
}
addLabel("Hodnota:", mLabels[x][1], 1, 2*x+1, c);
addLabel("N/A" , mLabels[x][2], 2, 2*x+1, c);
}
}
private void addLabel(String text, Label label, int x, int y, GridBagConstraints c)
{
// addLabel je fce usnadnujici pridani labelu, dalsi radek hlasi
// NullPointerException
label.setText(text);
c.gridx = x; c.gridy = y; c.gridwidth = 1; c.gridheight = 1;
c.weightx = 0.0; c.weighty = 0.0; c.anchor = GridBagConstraints.WEST;
add(label, c);
}
public void run()
{
Thread me = Thread.currentThread();
while (mTimer == me)
{
try
{
// tohle vlakno kazdou 1s
Thread.currentThread().sleep(1000);
// pokud nejsme pripojeni, pokracujeme
if(mXport == null || mXport.connected() == false)
continue;
// jinak muzeme prijimat
UpdateInput();
}
catch (InterruptedException e) { }
}
}
public void UpdateInput()
{
// nova data z XPortu
byte[] newData = mXport.receive();
//pokud nejsou nova data, neupdatuju
if(newData == null)
return;
// do GUI napisu nove hodnoty
updateOutput(newData);
}
private void updateOutput(byte[] data)
{
// zobrazujeme data z XPortu
int[] formattedData = formatData(data);
// projedu jiz formatovana vyst. data a vypisuji labely
for(int x = 0; x < 3; x++)
{
Integer sensorData = formattedData[x];
mLabels[x][2].setText(sensorData.toString());
}
}
private int[] formatData(byte[] rawData)
{
int[] finalData = new int[3];
for(int x = 46; x < 52; x=+2)
// preskocim na posledni napetovou hodnotu a NaPiCy
for(int y = 0; y < 3; y++)
{
finalData[y]=(byteToInt(rawData[x])*256+byteToInt(rawData[x+1]));
}
return finalData;
}
private int byteToInt(byte data)
{
// pri mezere vraci 0
if(data == 32)
return 0;
//jinak odecte ASCII kod 0
return data - 48;
}
}
Problém je ve fci addLabel, která generuje NullPointerException.
Přikládám i archiv se všemi soubory.