I'm rewriting an applet I have, but when it loads it's giving me a runtime exception. The exception is
Exception in thread "main" java.lang.NoSuchMethodError: ClientSettings: method <
init>()V not found
at RunClient.<init>(RunClient.java:41)
at RunClient.main(RunClient.java:63)
Here is RunClient:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Properties;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
public class RunClient extends Applet implements ActionListener {
private Robot robot;
private static final long serialVersionUID = 1L;
public static Properties params = new Properties();
public JFrame mainFrame;
public JPanel mainPane = new JPanel();
public static String[] data;
public String mainurl = getParameter("ip");
public int lang = 0;
public String frameName = getParameter("servername");
public JPanel totalPanel;
private JMenuBar menuBar = new JMenuBar();
private int capNum;
private FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File arg0, String arg1) {
if (arg0.getName().equals("images") && arg1.endsWith("png")) {
return true;
}
return false;
}
};
public static final Object[][] JMENU_BUTTONS = new Object[][]{{"File", new JMenuItem("New Client"), new JSeparator(), new JMenuItem("Exit")}, {"Guides", new JMenuItem("Getting Started"), new JMenuItem("Fighting Monsters"), new JMenuItem("Money Making")}, {"Links", new JMenuItem("Wiki"), new JMenuItem("Forums"), new JMenuItem("Youtube"), new JMenuItem("Donate")}, {"Tools", new JMenuItem("Take a screenshot")}};
public String[] getLoaderParameters() {
return new String[]{getParameter("servername"), getParameter("ip"), getParameter("port")};
}
public static void main(String[] strings) {
data = getLoaderParameters();
new ClientSettings(data);
RunClient runclient = new RunClient();
runclient.doFrame();
}
public RunClient() {
try {
loadCaptureAmts();
robot = new Robot();
} catch(Exception e) {
e.printStackTrace();
}
}
private void loadCaptureAmts() {
capNum = new File("./images/").listFiles(filter).length;
}
public void init() {
doApplet();
}
void doApplet() {
try {
readVars();
startClient();
} catch (Exception exception) {
exception.printStackTrace();
}
}
public void doFrame() {
try {
readVars();
openFrame();
startClient();
} catch (Exception exception) {
exception.printStackTrace();
}
}
public void readVars() throws IOException {
params.put("cabbase", "g.cab");
params.put("java_arguments", "-Xmx1024m -Dsun.java2d.noddraw=true");
params.put("colourid", "0");
params.put("worldid", "16");
params.put("lobbyid", "15");
params.put("demoid", "0");
params.put("demoaddress", "");
params.put("modewhere", "0");
params.put("modewhat", "0");
params.put("lang", "0");
params.put("objecttag", "0");
params.put("js", "1");
params.put("game", "0");
params.put("affid", "0");
params.put("advert", "1");
params.put("settings", "wwGlrZHF5gJcZl7tf7KSRh0MZLhiU0gI0xDX6DwZ-Qk");
params.put("country", "0");
params.put("haveie6", "0");
params.put("havefirefox", "1");
params.put("cookieprefix", "");
params.put("cookiehost", "127.0.0.1");
params.put("cachesubdirid", "0");
params.put("crashurl", "");
params.put("unsignedurl", "");
params.put("sitesettings_member", "1");
params.put("frombilling", "false");
params.put("sskey", "");
params.put("force64mb", "false");
params.put("worldflags", "8");
params.put("lobbyaddress", mainurl);
}
public void openFrame() {
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
mainPane.setLayout(new BorderLayout());
mainPane.add(this);
mainPane.setPreferredSize(new Dimension(765, 503));
totalPanel = new JPanel();
totalPanel.setPreferredSize(new Dimension(765, 503));
totalPanel.setLayout(new BorderLayout());
totalPanel.add(mainPane, BorderLayout.CENTER);
mainFrame = new JFrame(frameName);
mainFrame.setLayout(new BorderLayout());
mainFrame.getContentPane().add(totalPanel, BorderLayout.CENTER);
mainFrame.setDefaultCloseOperation(3);
//setMenuBar();
mainFrame.pack();
mainFrame.setVisible(true);
}
private void setMenuBar() {
int id = 0;
for (int y = 0; y < JMENU_BUTTONS.length; y++) {
JMenu menu = new JMenu();
for (int i = 0; i < JMENU_BUTTONS[y].length; i++) {
if (i == 0) {
menu.setText((String) JMENU_BUTTONS[y][i]);
} else if (JMENU_BUTTONS[y][i] instanceof JMenuItem){
JMenuItem item = (JMenuItem) JMENU_BUTTONS[y][i];
menu.add(item);
item.setActionCommand(""+ id++);
item.addActionListener(this);
} else {
menu.add((JSeparator) JMENU_BUTTONS[y][i]);
}
}
menuBar.add(menu);
}
mainFrame.setJMenuBar(menuBar);
}
public void startClient() {
try {
//RuntimeLoader loader = new RuntimeLoader();
//Class clientclass = loader.loadClass("client");
//Applet clientApplet = (Applet) clientclass.newInstance();
//clientclass.getMethod("provideLoaderApplet",
// new Class[] { java.applet.Applet.class }).invoke(null,
// new Object[] { this });
//clientApplet.init();
//clientApplet.start();
client.provideLoaderApplet(this);
client var_client = new client();
var_client.init();
var_client.start();
} catch (Exception exception) {
exception.printStackTrace();
}
}
public URL getDocumentBase() {
return getCodeBase();
}
public URL getCodeBase() {
URL url;
try {
url = new URL(new StringBuilder().append("http://").append(mainurl)
.toString());
} catch (Exception exception) {
exception.printStackTrace();
return null;
}
return url;
}
@Override
public void actionPerformed(ActionEvent e) {
switch (Integer.parseInt(e.getActionCommand())) {
case 1:
if (JOptionPane.showConfirmDialog(this, "Are you sure you want to quit?") == 0)
System.exit(0);
break;
case 2:
browse("http://dementhium.wikia.com/wiki/Getting_Started");
break;
case 3:
browse("http://forums.dementhium.com/showthread.php?t=143");
break;
case 4:
browse("http://dementhium.wikia.com/wiki/Dementhium_Wiki");
break;
case 5:
browse("http://dementhium.wikia.com/wiki/Dementhium_Wiki");
break;
case 6:
browse("http://forums.dementhium.com/");
break;
case 7:
browse("http://www.youtube.com/DementhiumOfficial");
break;
case 8:
browse("http://forums.dementhium.com/payments.php");
break;
case 9:
writeImage(robot.createScreenCapture(getGameScreenRectangle()));
break;
default:
System.out.println(Integer.parseInt(e.getActionCommand()));
}
}
private Rectangle getGameScreenRectangle() {
Rectangle rect = getBounds();
rect.setLocation(this.getLocationOnScreen());
return rect;
}
private void writeImage(BufferedImage createScreenCapture) {
try {
ImageIO.write(createScreenCapture, "PNG", new File("./images/capture-" + capNum++ + ".png"));
} catch (IOException e) {
e.printStackTrace();
}
}
private void browse(String string) {
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
try {
Desktop.getDesktop().browse(new URI(string));
} catch (IOException e1) {
e1.printStackTrace();
} catch (URISyntaxException e1) {
e1.printStackTrace();
}
}
}
}
and here is ClientSettings.java, this is called from various files, args is always defined using
public String[] data;
in RunClient
public class ClientSettings {
public int PORT;
public String IPADDRESS;
public String SERVERNAME;
public ClientSettings(String[] args) {
PORT = Integer.parseInt(args[2]);
IPADDRESS = args[1];
SERVERNAME = args[0];
}
}
Line 41 of RunClient
is looking for a default constructor on ClientSettings
, which doesn't exist. You've defined a constructor that takes a String[]
, so no default constructor is generated. It looks like the code you've posted isn't what's running, because it seems to show a correct constructor call.
I had the same problem, but when writing unit tests. The test was failing with this exception when creating the object I wanted to test. I did add a new constructor in the class I was testing and I think I was running an older code which didn't have this constructor. Cleaning and rebuilding the workspace (with maven) solved it for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With