【发布时间】:2019-08-02 04:47:02
【问题描述】:
我正在处理client-server 应用程序,作为我课程作业的一部分。该程序基本上只是计算素数,gcd等。
客户端是一个 GUI,服务器端处理请求并执行计算。
有一个名为 Contract 的 folder 包含用于计算素数、gcd 和 pi 的计算任务类。
用户单击“计算”按钮,向服务器发送请求以检查文件夹中是否存在相应的计算类。如果找到,则服务器使用父接口“任务”进行计算并将结果发送回客户端。如果文件不存在,则服务器向客户端发送错误消息。
但这是我的问题:
在我之前的 SO 问题的帮助下,我设法检查了文件是否存在。现在,如果在执行服务器和客户端程序之前文件夹中没有该文件,当我尝试在服务器端动态加载类时,我会在客户端得到这个exception。此外,如果文件不在文件夹中,用户必须上传文件夹中的文件,然后如果服务器看到它在那里,它必须在运行时加载类文件。
我该如何解决这个问题?
检查文件是否存在并加载类的服务器端代码:
public boolean checkIfFileExists(String classFile){
String path = "./src/Server/Contract/"+classFile+".java";
String classF = "Server.Contract."+classFile;
File file = new File(path);
if(file.exists()){
try{
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
Class cls = classLoader.loadClass(classF);
Object obj = cls.newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
}
//catch (MalformedURLException ex) {
//}
return true;
}
else{
return false;
}
}
基本上我期望这个方法做的是如果文件存在则返回true并加载类,然后服务器执行我的代码的其余部分,如果它不存在则返回false。
P.S.服务器和客户端在同一台机器上运行,服务器是本地主机。
服务器加载后如何让客户端使用该类?另外,我正在使用 Netbeans 和 JDK 1.8,这有帮助。这些是我的课程使用的。
作业要求: " 但是,当发生异常时(例如,计算客户端想要计算服务器 执行计算任务,但忘记将计算任务的 Java 类上传到 计算服务器的类存储库,计算服务器将创建一个 CSMessage 对象 并将其发送回计算客户端。注意:CSMessage 遵循交互契约 通过实现Task接口。通过调用 getResult() 方法,computeclient 将知道问题并在以后修复它。”
【问题讨论】:
-
每当我尝试在 Netbeans 中创建一个新类时,它都会将其保存为 .java 文件。这样可以吗?
-
@OP 如果您想为您的问题添加更多内容,只需编辑原始内容并添加即可。它会在 cmets 中丢失。
-
为什么类一开始就没有服务端应用?
-
@flakes 我下次会这样做
-
@lalitmehra 我不确定。出于某种原因,Netbeans 在“Build”文件夹下创建了 .class 文件。如果我将 .java 文件重命名为 .class 文件,我会在客户端代码中遇到导入错误
标签: java exception error-handling server