D
Devilmarkus
Gast
Hello,
please, can someone explain me, how I can call a non-static routine from a static one?
My problem is:
I want to call from jemu.ui.JEMU.java a routine in jemu.system.cpc.CPCDiscImage.java.
JEMU.java:
CPCDiscImage.java:
Problem:
It would be great, if somebody can help me...
Cheers, Markus
please, can someone explain me, how I can call a non-static routine from a static one?
My problem is:
I want to call from jemu.ui.JEMU.java a routine in jemu.system.cpc.CPCDiscImage.java.
JEMU.java:
Code:
............
import jemu.system.cpc.CPCDiscImage.java
............
protected void UserSave(){
CPCDiscImage.UserSave();
}
............
CPCDiscImage.java:
Code:
............
public synchronized void UserSave() {
// choose destination file
final JFileChooser fc = new JFileChooser();
fc.setDialogTitle("Select destination dsk file...");
int result = fc.showSaveDialog(null);
final String newFileName = fc.getSelectedFile().getAbsolutePath();
// create file name '_saved'
File discImage = new File(newFileName);
String saveFileName = discImage.getName();
File savedImage = new File(discImage.getParent(), saveFileName);
if (System.getSecurityManager() != null) {
try {
System.getSecurityManager().checkWrite(savedImage.getAbsolutePath());
} catch ( SecurityException sex) {
// son't save
return;
}
}
System.out.println("store dsk file to " + savedImage);
name = savedImage.getAbsolutePath();
// save data to file
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(savedImage));
// disc information block
bos.write(EXTENDED_DESCRIPTION.getBytes(ENCODING));
bos.write(CREATOR_DATA.getBytes(ENCODING));
bos.write(numberOfTracks);
bos.write(numberOfSides);
bos.write(0);
bos.write(0);
// track size table
for (int track = 0; track < numberOfTracks; track++) {
for (int side = 0; side < numberOfSides; side++) {
int trackLength = tracks[track][side].getLength();
bos.write((trackLength / 256) & 0xFF);
}
}
int unused = 0x100 - 0x34 - numberOfTracks * numberOfSides;
for (int i = 0; i < unused; i++) {
bos.write(0);
}
// track data
for (int track = 0; track < numberOfTracks; track++) {
for (int side = 0; side < numberOfSides; side++) {
CPCDiscImageTrack td = tracks[track][side];
// track information block
bos.write(TRACK_INFO.getBytes(ENCODING));
bos.write(0); // track info end
bos.write(0); // unused
bos.write(0); // unused
bos.write(0); // unused
bos.write(td.getTrack());
bos.write(td.getSide());
bos.write(0); // unused
bos.write(0); // unused
bos.write(td.getSector(0).getSize()); // UPD765A size
int numberOfSectors = td.getSectorCount();
bos.write(numberOfSectors);
bos.write(0x4e); // GAP#3 length
bos.write(0xe5); // filler byte
// sector information list
for (int sector = 0; sector < numberOfSectors; sector++) {
CPCDiscImageSector sd = td.getSector(sector);
bos.write(sd.getTrack());
bos.write(sd.getSide());
bos.write(sd.getId());
bos.write(sd.getSize()); // UPD765A size
bos.write(0); // FDC status register 1
bos.write(0); // FDC status register 2
int dataSize = sd.getData().length;
bos.write(dataSize & 0xFF);
bos.write((dataSize / 256) & 0xFF);
// System.out.println("sec " + sd.getTrack() + "/" + sd.getSide() + "/" + sd.getId() + "/"
// + UPD765A.getCommandSize(sd.getSize()) + " size=" + sd.getData().length);
// System.out.println(" -> " + (dataSize & 0xFF) + " / " + ((dataSize / 256) & 0xFF));
}
unused = 0x100 - 0x18 - 8 * numberOfSectors;
for (int i = 0; i < unused; i++) {
bos.write(0);
}
for (int sector = 0; sector < numberOfSectors; sector++) {
bos.write(td.getSector(sector).getData());
}
}
}
bos.close();
} catch ( IOException iox) {
System.out.println("can't write to file " + savedImage + ": " + iox.getMessage());
}
}
...........
Problem:
Code:
jemu\ui\JEMU.java:1160: non-static method UserSave() cannot be referenced from a static context
It would be great, if somebody can help me...
Cheers, Markus