From dd259c48bfa1d505fdc4ace54821bebaf6141f16 Mon Sep 17 00:00:00 2001 From: Jered Ye <87924680+JeredYe@users.noreply.github.com> Date: Tue, 26 Mar 2024 22:38:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=87=AA=E7=94=B1=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E8=A3=81=E5=88=A4=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 ++ JuderUI/src/META-INF/jax-ws-catalog.xml | 1 + .../106.15.36.190_80/oj/webservice/OJWS.wsdl | 2 +- JuderUI/src/data/JudgeFromQueue.java | 16 ++++- JuderUI/src/data/MainForNet.java | 6 ++ JuderUI/src/gui/Control.java | 7 +- JuderUI/src/gui/MainFrame.form | 23 ++++-- JuderUI/src/gui/MainFrame.java | 70 ++++++++++++++++-- JuderUI/src/myjdom/XmlToProblemBean.java | 4 ++ JuderUI/src/myjdom/XmlToSolution.java | 14 +++- JuderUI/src/myjdom/model/Solution.java | 18 +++-- JuderUI/src/swingworker/MySwingWorker.java | 16 ++++- JuderUI/src/web/Webservice.java | 6 +- Judger/src/kernel/ExeCommand.java | 2 +- Judger/src/kernel/Judger.java | 72 +++++++++++++------ Judger/src/main/Process.java | 10 +-- Judger/src/share/gui/NewCompileSetting.java | 16 ++--- .../106.15.36.190_80/oj/webservice/OJWS.wsdl | 2 +- client/src/client/view/panel/CodePanel.java | 21 +++++- .../106.15.36.190_80/oj/webservice/OJWS.wsdl | 2 +- config.xml | 63 ---------------- 自选编译器文档.md | 13 ++++ 22 files changed, 263 insertions(+), 127 deletions(-) delete mode 100644 config.xml create mode 100644 自选编译器文档.md diff --git a/.gitignore b/.gitignore index d830644..62c26d3 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,9 @@ Judger/dist/lib/Common.jar *.class *.zip *.jar +client/nbproject/private/private.properties +*.class +*.log +*.exe +*.class +*.jar diff --git a/JuderUI/src/META-INF/jax-ws-catalog.xml b/JuderUI/src/META-INF/jax-ws-catalog.xml index 861ed9d..ced1306 100644 --- a/JuderUI/src/META-INF/jax-ws-catalog.xml +++ b/JuderUI/src/META-INF/jax-ws-catalog.xml @@ -4,4 +4,5 @@ + \ No newline at end of file diff --git a/JuderUI/src/META-INF/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl b/JuderUI/src/META-INF/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl index f277d8e..0da2ae1 100644 --- a/JuderUI/src/META-INF/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl +++ b/JuderUI/src/META-INF/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl @@ -872,7 +872,7 @@ - + \ No newline at end of file diff --git a/JuderUI/src/data/JudgeFromQueue.java b/JuderUI/src/data/JudgeFromQueue.java index 66807c2..da6e722 100644 --- a/JuderUI/src/data/JudgeFromQueue.java +++ b/JuderUI/src/data/JudgeFromQueue.java @@ -6,6 +6,7 @@ package data; import cache.ProblemsCachManager; +import common.Const; import gui.Control; import java.awt.EventQueue; import java.util.ArrayList; @@ -27,6 +28,8 @@ import myjdom.model.Solutions; import persistence.oj_beans.ProblemTestCaseBean; import swingworker.MySwingWorker; import log.Log; +import resultData.CompileInfo; +import resultData.Result; /** * @@ -129,13 +132,17 @@ public class JudgeFromQueue extends Thread { //´Ó¶ÓÁÐÖлñÈ¡´úÂë²¢²ÃÅÐ public void Judge(Solution s) throws Exception { + String solutionId = s.getSolutionId(); String problemId = s.getProblemId(); - String language = s.getLangeuage(); + String language = s.getLanguage(); String sourceCode = s.getCode(); + String compiler=s.getCompiler(); + Float timeOut = problemBeanMap.get(problemId).getTimeOut(); List testCaseBeanList = problemBeanMap.get(problemId).getTestCaseBeanList(); - MySwingWorker myswingworker = new MySwingWorker(threadNo, solutionId, problemId, language, sourceCode, timeOut, testCaseBeanList, this::changeMessage, this::submitAnswer); + + MySwingWorker myswingworker = new MySwingWorker(threadNo, solutionId, problemId, language,compiler, sourceCode, timeOut, testCaseBeanList, this::changeMessage, this::submitAnswer); myswingworker.execute(); myswingworker.get(); // int i =1/0; @@ -154,6 +161,11 @@ public class JudgeFromQueue extends Thread { problemsCachManager.putObject("problemId" + problemId, problem); } + if(problem.isEmpty()){ + Result.status = Const.CE; + CompileInfo.remark = "»ñÈ¡ÌâÄ¿ÐÅϢʧ°Ü£¡"; + return; + } // System.out.println(Integer.parseInt(problemId)); // System.out.println(xml); diff --git a/JuderUI/src/data/MainForNet.java b/JuderUI/src/data/MainForNet.java index 9c6cad7..39510ff 100644 --- a/JuderUI/src/data/MainForNet.java +++ b/JuderUI/src/data/MainForNet.java @@ -6,17 +6,21 @@ package data; import gui.Control; +import static gui.Control.getJudgeInfoEditorPane; import java.awt.EventQueue; import java.net.URL; +import java.time.LocalTime; import java.util.List; import java.util.Map; import java.util.concurrent.locks.Lock; +import javax.swing.JEditorPane; import myjdom.XmlToSolution; import myjdom.model.Solution; import myjdom.model.Solutions; import myjdom.model.ProblemBean; import persistence.oj_beans.ProblemTestCaseBean; import web.Webservice; +import static web.Webservice.existDubbo; /** * @@ -48,6 +52,7 @@ public class MainForNet extends Thread { continue; } System.out.println("¿ªÊ¼»ñÈ¡solution"); + List list = getWebServiceSolutions(); System.out.println("»ñÈ¡slolutinÊýÁ¿"+list.size()); // getServerObject(); @@ -91,6 +96,7 @@ public class MainForNet extends Thread { private List getWebServiceSolutions() throws Exception { Control.setWebService(new Webservice(new URL(Control.getUrl()), Control.getQname())); + String xml = Control.getWebService().getSolutions(5); XmlToSolution xts = new XmlToSolution(); xts.readXmlString(xml); diff --git a/JuderUI/src/gui/Control.java b/JuderUI/src/gui/Control.java index 18549ef..759ba12 100644 --- a/JuderUI/src/gui/Control.java +++ b/JuderUI/src/gui/Control.java @@ -228,7 +228,12 @@ public class Control { public static String getChooseDirectory() { return getChooseDirectory("a"); } - + public static String getCppCompilerName(){ + return mainFrame.getSelectedCppCompilerName(); + } + public static String getJavaCompilerName(){ + return mainFrame.getSelectedJavaCompilerName(); + } public static String getChooseDirectory(String lan) { try { diff --git a/JuderUI/src/gui/MainFrame.form b/JuderUI/src/gui/MainFrame.form index 3519b40..5ef3fe5 100644 --- a/JuderUI/src/gui/MainFrame.form +++ b/JuderUI/src/gui/MainFrame.form @@ -136,7 +136,7 @@ - + @@ -531,7 +531,10 @@ - + + + + @@ -545,10 +548,17 @@ + + + + - + + + + @@ -562,6 +572,10 @@ + + + + @@ -571,7 +585,8 @@ - + + diff --git a/JuderUI/src/gui/MainFrame.java b/JuderUI/src/gui/MainFrame.java index f3c947f..cc9c78b 100644 --- a/JuderUI/src/gui/MainFrame.java +++ b/JuderUI/src/gui/MainFrame.java @@ -283,17 +283,40 @@ public class MainFrame extends javax.swing.JFrame { } }); - jLabel8.setText("C/C++±àÒëÆ÷:"); + jLabel8.setFont(new java.awt.Font("ËÎÌå", 0, 10)); // NOI18N + jLabel8.setText("ĬÈÏC/C++±àÒëÆ÷:"); comboCppCompiler.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + comboCppCompiler.addItemListener(new java.awt.event.ItemListener() { + public void itemStateChanged(java.awt.event.ItemEvent evt) { + comboCppCompilerItemStateChanged(evt); + } + }); + comboCppCompiler.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + comboCppCompilerActionPerformed(evt); + } + }); - jLabel10.setText("Java±àÒëÆ÷:"); + jLabel10.setFont(new java.awt.Font("ËÎÌå", 0, 10)); // NOI18N + jLabel10.setText("ĬÈÏJava±àÒëÆ÷:"); comboJavaCompiler.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + comboJavaCompiler.addItemListener(new java.awt.event.ItemListener() { + public void itemStateChanged(java.awt.event.ItemEvent evt) { + comboJavaCompilerItemStateChanged(evt); + } + }); + comboJavaCompiler.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + comboJavaCompilerActionPerformed(evt); + } + }); jCheckBox2.setFont(new java.awt.Font("ËÎÌå", 2, 12)); // NOI18N jCheckBox2.setForeground(new java.awt.Color(0, 204, 102)); - jCheckBox2.setText("dubbo"); + jCheckBox2.setSelected(true); + jCheckBox2.setText("Dubbo"); jCheckBox1.setToolTipText("Ï´γÌÐòÆô¶¯Ê±£¬×Ô¶¯¿ªÊ¼²ÃÅÐ"); jCheckBox2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -358,7 +381,7 @@ public class MainFrame extends javax.swing.JFrame { .addComponent(threadManagerTabb, javax.swing.GroupLayout.PREFERRED_SIZE, 955, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(28, 28, 28))) .addGap(21, 21, 21) - .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 1, Short.MAX_VALUE)) + .addComponent(jSeparator1)) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -439,6 +462,7 @@ public class MainFrame extends javax.swing.JFrame { if (Control.stopJudgerForNet()) { this.button_Start.setEnabled(true); this.buttonStop.setEnabled(false); + this.jCheckBox2.setEnabled(true); this.jLabel14.setText("ÕýÔڹرÕ"); this.button_StartThread.setEnabled(false); } @@ -466,6 +490,7 @@ public class MainFrame extends javax.swing.JFrame { this.button_Start.setEnabled(false); this.buttonStop.setEnabled(true); this.button_StartThread.setEnabled(true); + this.jCheckBox2.setEnabled(false); Webservice.existDubbo=false; // if(!Dubboservice.running){ // Dubboservice.main(null); @@ -489,10 +514,10 @@ public class MainFrame extends javax.swing.JFrame { private boolean checkForCompile() { String tmp = null; tmp = Config.getCompilerDir("c",comboCppCompiler.getSelectedItem().toString()); - if (tmp == null || "".equals(tmp) || !FileFinder.isExistFile(tmp + File.separator + "gcc.exe") || !FileFinder.isExistFile(tmp + File.separator + "g++.exe")) { + if (tmp == null || "".equals(tmp) || !FileFinder.isExistFile(tmp + File.separator + "gcc.exe")&&!FileFinder.isExistFile(tmp + File.separator + "g++.exe")&&!FileFinder.isExistFile(tmp + File.separator + "/bin/cl.exe")) { //µ¯´°ÉèÖñ£´æ - JOptionPane.showMessageDialog(this, "ÇëÏÈÅäÖÃCÓïÑÔ±àÒëÆ÷"); + JOptionPane.showMessageDialog(this, "ÇëÏÈÅäÖÃC/C++±àÒëÆ÷"); // NewCompileSetting window = new NewCompileSetting("c", this, true); // window.setVisible(true); return false; @@ -508,6 +533,12 @@ public class MainFrame extends javax.swing.JFrame { } return true; } + public String getSelectedCppCompilerName(){ + return comboCppCompiler.getSelectedItem().toString(); + } + public String getSelectedJavaCompilerName(){ + return comboJavaCompiler.getSelectedItem().toString(); + } private void button_StartThreadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button_StartThreadActionPerformed String s = jComboBox1.getSelectedItem().toString(); @@ -539,6 +570,33 @@ public class MainFrame extends javax.swing.JFrame { Webservice.ENABLE_DUBBO=jCheckBox2.isSelected(); }//GEN-LAST:event_jCheckBox2ActionPerformed + private void comboCppCompilerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboCppCompilerActionPerformed + try{ + LangSelector.setDefaultCompiler("C++", comboCppCompiler.getSelectedItem().toString()); + } + catch(Exception e){ + //e.printStackTrace(); + } + }//GEN-LAST:event_comboCppCompilerActionPerformed + + private void comboJavaCompilerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboJavaCompilerActionPerformed + + try{ + LangSelector.setDefaultCompiler("Java", comboJavaCompiler.getSelectedItem().toString()); + } + catch(Exception e){ + + } + }//GEN-LAST:event_comboJavaCompilerActionPerformed + + private void comboCppCompilerItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboCppCompilerItemStateChanged + //LangSelector.setDefaultCompiler("C++", comboCppCompiler.getSelectedItem().toString()); + }//GEN-LAST:event_comboCppCompilerItemStateChanged + + private void comboJavaCompilerItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboJavaCompilerItemStateChanged + //LangSelector.setDefaultCompiler("Java", comboJavaCompiler.getSelectedItem().toString()); + }//GEN-LAST:event_comboJavaCompilerItemStateChanged + private void loadConfig() { this.distributorIP.setText(Config.getValue("distributorIP")); this.distributorPort.setText(Config.getValue("distributorPort")); diff --git a/JuderUI/src/myjdom/XmlToProblemBean.java b/JuderUI/src/myjdom/XmlToProblemBean.java index 96ae7f2..fb3dd3e 100644 --- a/JuderUI/src/myjdom/XmlToProblemBean.java +++ b/JuderUI/src/myjdom/XmlToProblemBean.java @@ -5,6 +5,7 @@ */ package myjdom; +import common.Const; import java.util.ArrayList; import java.util.List; import myjdom.model.ProblemBean; @@ -13,6 +14,8 @@ import persistence.oj_beans.ProblemTestCaseBean; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import resultData.CompileInfo; +import resultData.Result; /** * @@ -24,6 +27,7 @@ public class XmlToProblemBean extends XmlToBase implements XmlConvert testCaseList = new ArrayList<>(); + String s = doc.getDocumentElement().getElementsByTagName("time_limit").item(0).getTextContent(); pb.setTimeOut(Float.parseFloat(doc.getDocumentElement().getElementsByTagName("time_limit").item(0).getTextContent())); NodeList list =doc.getDocumentElement().getElementsByTagName("Case"); diff --git a/JuderUI/src/myjdom/XmlToSolution.java b/JuderUI/src/myjdom/XmlToSolution.java index bf686e9..ab7131a 100644 --- a/JuderUI/src/myjdom/XmlToSolution.java +++ b/JuderUI/src/myjdom/XmlToSolution.java @@ -5,6 +5,7 @@ */ package myjdom; +import com.sun.media.jfxmedia.logging.Logger; import java.util.ArrayList; import java.util.List; import myjdom.model.Solution; @@ -44,11 +45,22 @@ public class XmlToSolution extends XmlToBase implements XmlConvert { s.setSubmitTime(e.getElementsByTagName("submitTime").item(0).getTextContent()); } if (e.getElementsByTagName("language").item(0) != null) { - s.setLangeuage(e.getElementsByTagName("language").item(0).getTextContent()); + s.setLanguage(e.getElementsByTagName("language").item(0).getTextContent()); } + if (e.getElementsByTagName("compiler").item(0) != null) { + s.setCompiler(e.getElementsByTagName("compiler").item(0).getTextContent()); + Logger.logMsg(Logger.DEBUG,"µ±Ç°±àÒëÆ÷:"+e.getElementsByTagName("compiler").item(0).getTextContent()); + System.out.println("µ±Ç°±àÒëÆ÷:"+e.getElementsByTagName("compiler").item(0).getTextContent()); + }/////NEW + + if (e.getElementsByTagName("code").item(0) != null) { s.setCode(e.getElementsByTagName("code").item(0).getTextContent()); } + + + System.out.println(s.toString()); + solutionList.add(s); } if (solutionList.size() == 1 && solutionList.get(0).getProblemId() == null) { diff --git a/JuderUI/src/myjdom/model/Solution.java b/JuderUI/src/myjdom/model/Solution.java index 16898ad..bae75ee 100644 --- a/JuderUI/src/myjdom/model/Solution.java +++ b/JuderUI/src/myjdom/model/Solution.java @@ -13,9 +13,17 @@ public class Solution { private String solutionId; private String problemId; private String submitTime; - private String langeuage; + private String language; + private String compiler; private String code; + + public void setCompiler(String compiler){ + this.compiler=compiler; + } + public String getCompiler(){ + return compiler; + } /** * @return the solutionId */ @@ -75,14 +83,14 @@ public class Solution { /** * @return the langeuage */ - public String getLangeuage() { - return langeuage; + public String getLanguage() { + return language; } /** * @param langeuage the langeuage to set */ - public void setLangeuage(String langeuage) { - this.langeuage = langeuage; + public void setLanguage(String language) { + this.language = language; } } diff --git a/JuderUI/src/swingworker/MySwingWorker.java b/JuderUI/src/swingworker/MySwingWorker.java index f25a91b..019c80a 100644 --- a/JuderUI/src/swingworker/MySwingWorker.java +++ b/JuderUI/src/swingworker/MySwingWorker.java @@ -23,23 +23,28 @@ public class MySwingWorker extends SwingWorker{ private String solutionId; private String problemId; private String language; + private String compiler; + + private String sourceCode; private Float timeOut; private List testCaseList; - public MySwingWorker(int threadNo,String solutionId,String problemId,String language,String sourceCode,Float timeOut,List testCaseList,Consumer changeMessage,Consumer submitResult){ + public MySwingWorker(int threadNo,String solutionId,String problemId,String language,String compiler,String sourceCode,Float timeOut,List testCaseList,Consumer changeMessage,Consumer submitResult){ this.solutionId = solutionId; this.problemId = problemId; this.language = language; + this.compiler=compiler; this.sourceCode = sourceCode; this.timeOut = timeOut; this.testCaseList = testCaseList; this.con1 = changeMessage; this.con2 = submitResult; + } @Override protected Answer doInBackground() throws Exception { - return new Process().Judge(getSolutionId(),getProblemId(),getLanguage(), getSourceCode(), timeOut, getTestCaseList(),this::writeToGui); + return new Process().Judge(getSolutionId(),getProblemId(),getLanguage(),getCompiler(), getSourceCode(), timeOut, getTestCaseList(),this::writeToGui); } public void writeToGui(String s){ @@ -66,7 +71,12 @@ public class MySwingWorker extends SwingWorker{ } - + public void setCompier(String compiler){ + this.compiler=compiler; + } + public String getCompiler(){ + return compiler; + } /** * @return the language */ diff --git a/JuderUI/src/web/Webservice.java b/JuderUI/src/web/Webservice.java index 36a7fae..2f25b1f 100644 --- a/JuderUI/src/web/Webservice.java +++ b/JuderUI/src/web/Webservice.java @@ -55,7 +55,7 @@ public class Webservice implements java.rmi.Remote{ reference.setApplication(application); reference.setInterface(OJWS.class); reference.setUrl(url); // ÉèÖÃÔ¶³Ì·þÎñµÄ URL - + reference.setTimeout(3000); // ³õʼ»¯ return reference.get(); } @@ -71,8 +71,10 @@ public class Webservice implements java.rmi.Remote{ JEditorPane infoPane=getJudgeInfoEditorPane(0); if(!existDubbo&&infoPane!=null) infoPane.setText(infoPane.getText()+LocalTime.now().toString()+"ÕýÔÚÇëÇóDubbo·þÎñ...\n"); - //String url = "dubbo://219.228.76.122:20880/edu.dhu.ws.OJWS";//todo:ÐèÒª¸Ä³ÉÓû§×Ô¼ºÊäÈë + dubboPort = initDubboPort(url); + //infoPane.setText(infoPane.getText()+LocalTime.now().toString()+"²âÊÔtestÇëÇó£º..."+dubboPort.test("aa")+"\n"); + } catch(Exception e){ JEditorPane infoPane=getJudgeInfoEditorPane(1); diff --git a/Judger/src/kernel/ExeCommand.java b/Judger/src/kernel/ExeCommand.java index 34120bf..96ab38b 100644 --- a/Judger/src/kernel/ExeCommand.java +++ b/Judger/src/kernel/ExeCommand.java @@ -223,7 +223,7 @@ public class ExeCommand { errorInfoWrite.join(); JudgerInfo.exitValue = result; JudgerInfo.info = infoWrite.returnInfo(); - JudgerInfo.errorInfo = errorInfoWrite.returnInfo(); + JudgerInfo.errorInfo = errorInfoWrite.returnInfo()+JudgerInfo.info; return result; } catch (Exception ex) { diff --git a/Judger/src/kernel/Judger.java b/Judger/src/kernel/Judger.java index 3642681..f2cbab8 100644 --- a/Judger/src/kernel/Judger.java +++ b/Judger/src/kernel/Judger.java @@ -15,6 +15,8 @@ import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import log.Log; @@ -59,13 +61,13 @@ public class Judger { public Boolean checkForCompiler(){ - File file1 = new File(Config.getCompilerDir("c",null) + File.separator + "gcc.exe"); - File file2 = new File(Config.getCompilerDir("c",null) + File.separator + "gcc.exe"); - if (!file1.exists() || !file2.exists()) { - System.out.println("±àÒëÆ÷δÕÒµ½"); - isFound = false; - return false; - } + //File file1 = new File(Config.getCompilerDir("c",null) + File.separator + "gcc.exe"); + //File file2 = new File(Config.getCompilerDir("c",null) + File.separator + "gcc.exe"); + //if (!file1.exists() || !file2.exists()) { + // System.out.println("±àÒëÆ÷δÕÒµ½"); + // isFound = false; + // return false; + //} isFound = true; return true; } @@ -106,38 +108,64 @@ public class Judger { } - private String linkCommand(String language) { + private String linkCommand(String language,String compiler) { + if(compiler==null){ + compiler=LangSelector.getDefaultCompilerName(language); + } //String language = "c"; - String linkCommand = Config.getCompilerDir(language) + File.separator + "g++ " +"\""+ Config.getTargetPath() +File.separator+"output"+File.separator+ "Main"+".o"+"\"" + " -o " +"\""+ Config.getTargetPath()+File.separator+"output"+File.separator + "Main"+".exe"+"\"\n"; + HashMapmap=new HashMap<>(); + map.put(LangSelector.PlaceHolder.CompilerPath.getStr(),Config.getCompilerDir(language,compiler)); + map.put(LangSelector.PlaceHolder.SourceFile.getStr(),sourceFile); + if(!compiler.toLowerCase().equals("msvc")) + map.put(LangSelector.PlaceHolder.ObjFile.getStr(),Config.getTargetPath()+ File.separator+"output"+ File.separator + "Main.o"); + else + map.put(LangSelector.PlaceHolder.ObjFile.getStr(),Config.getTargetPath()+ File.separator+"output"+ File.separator + "Main.obj"); + map.put(LangSelector.PlaceHolder.ExeFile.getStr(),Config.getTargetPath()+ File.separator+"output"+ File.separator + "Main.exe"); + String linkCommand = LangSelector.matchPlaceHolder(LangSelector.getCompileCommand("C++",compiler), map); + //String linkCommand = Config.getCompilerDir(language) + File.separator + "g++ " +"\""+ Config.getTargetPath() +File.separator+"output"+File.separator+ "Main"+".o"+"\"" + " -o " +"\""+ Config.getTargetPath()+File.separator+"output"+File.separator + "Main"+".exe"+"\"\n"; return linkCommand; } /////////////////////////////////////////////////////////////////////////////////////////////////TODO //mingw32-g++.exe -Wall -g -c E:\Downloads\aaa\aa.cpp -o obj\Debug\aa.o //mingw32-g++.exe -o bin\Debug\aaa.exe obj\Debug\aa.o - private String compileCommand(String language) { + private String compileCommand(String language,String compiler) {////////////TODO String compileCommand = ""; + if(compiler==null){ + compiler=LangSelector.getDefaultCompilerName(language); + } language = language.toLowerCase();//todo if (language.equals("c")) { - compileCommand += "\"" + Config.getCompilerDir(language) + File.separator + "gcc\" -c " + "\""+sourceFile +"\""+ " -o " +"\""+Config.getTargetPath()+ File.separator+"output"+ File.separator + "Main"+".o"+"\"\n"; + + compileCommand += "\"" + Config.getCompilerDir(language,compiler) + File.separator + "gcc\" -c " + "\""+sourceFile +"\""+ " -o " +"\""+Config.getTargetPath()+ File.separator+"output"+ File.separator + "Main"+".o"+"\"\n"; } else if (language.equals("java")) { - compileCommand += "\"" + Config.getCompilerDir(language) + File.separator + "javac\" " + sourceFile; //todoÎļþ·¾¶ + compileCommand += "\"" + Config.getCompilerDir(language,compiler) + File.separator + "javac\" " + sourceFile; //todoÎļþ·¾¶ } else if (language.equals("cpp")||language.equals("c++")) { //compileCommand +=Config.getCompilerDir(language) + File.separator +LangSelector.getCompileCommand("C++",null); - compileCommand += "\"" + Config.getCompilerDir(language) + File.separator + "g++\" -Wall -g -c -std=c++14 "//todo:C++14 - + "\""+sourceFile+"\"" + " -o " + "\""+Config.getTargetPath()+ File.separator+"output"+ File.separator + "Main"+".o"+"\"\n"; + + HashMapmap=new HashMap<>(); + map.put(LangSelector.PlaceHolder.CompilerPath.getStr(),Config.getCompilerDir(language,compiler)); + map.put(LangSelector.PlaceHolder.SourceFile.getStr(),sourceFile); + if(!compiler.toLowerCase().equals("msvc")) + map.put(LangSelector.PlaceHolder.ObjFile.getStr(),Config.getTargetPath()+ File.separator+"output"+ File.separator + "Main.o"); + else + map.put(LangSelector.PlaceHolder.ObjFile.getStr(),Config.getTargetPath()+ File.separator+"output"+ File.separator + "Main.obj"); + map.put(LangSelector.PlaceHolder.ExeFile.getStr(),Config.getTargetPath()+ File.separator+"output"+ File.separator + "Main.exe"); + compileCommand = LangSelector.matchPlaceHolder(LangSelector.getCompileCommand("C++",compiler), map); + //compileCommand += "\"" + Config.getCompilerDir(language) + File.separator + "g++\" -Wall -g -c -std=c++1y "//todo:C++14 + // + "\""+sourceFile+"\"" + " -o " + "\""+Config.getTargetPath()+ File.separator+"output"+ File.separator + "Main"+".o"+"\"\n"; } else { CompileInfo.info = "this programing language is not support!!!"; } return compileCommand; } - private String runCommand(String language) { + private String runCommand(String language,String compiler) { String runCommand = ""; if (language.equals("c")) { runCommand +="\""+ Config.getTargetPath()+ File.separator+"output"+File.separator + "Main"+"\""; } else if (language.equals("java")) { - runCommand += Config.getCompilerDir(language) + File.separator + "java"+ " -cp " + Config.getSourcePath()+ File.separator+"output"+File.separator+ " "+mainClassName; // TODO Îļþ·¾¶ start + runCommand += Config.getCompilerDir(language,compiler) + File.separator + "java"+ " -cp " + Config.getSourcePath()+ File.separator+"output"+File.separator+ " "+mainClassName; // TODO Îļþ·¾¶ start //System.err.println(runCommand); } else if (language.equals("cpp")||language.equals("c++")) { runCommand += "\""+ Config.getTargetPath()+ File.separator+"output"+File.separator + "Main"+"\""; @@ -146,7 +174,7 @@ public class Judger { return runCommand; } - public int compile(String sourceCode, String language) { + public int compile(String sourceCode, String language,String compiler) { int result = -1; //¼ì²éÓïÑÔÊÇ·ñÔÚ·¶Î§ÄÚ language = language.toLowerCase(); @@ -170,12 +198,12 @@ public class Judger { saveSourceCodeFile(language, sourceCode); int repeatTime = 3; - String compileCom = compileCommand(language); + String compileCom = compileCommand(language,compiler); for (int i = 0; i < repeatTime; i++) { - result = exe.exeCompile(compileCom,"Path="+Config.getCompilerDir(language)); + result = exe.exeCompile(compileCom,"Path="+Config.getCompilerDir(language,compiler)); if (result == 0) { if (language.equals("c") || language.equals("cpp")||language.equals("c++")) { - result = exe.exeLink(linkCommand(language),"Path="+Config.getCompilerDir(language)); + result = exe.exeLink(linkCommand(language,compiler),"Path="+Config.getCompilerDir(language,compiler)); if(result==0){ break; } @@ -187,9 +215,9 @@ public class Judger { return result; } - public int run(String language, String input, int timeLimit) { + public int run(String language,String compiler, String input, int timeLimit) { language = language.toLowerCase(); - return exe.exeRun(runCommand(language), "Path="+Config.getCompilerDir(language), input, timeLimit); + return exe.exeRun(runCommand(language,compiler), "Path="+Config.getCompilerDir(language,compiler), input, timeLimit); } public boolean check(String stdAns) { diff --git a/Judger/src/main/Process.java b/Judger/src/main/Process.java index 7ce4b1b..10b8fdb 100644 --- a/Judger/src/main/Process.java +++ b/Judger/src/main/Process.java @@ -96,7 +96,7 @@ public class Process { } //WebServiceÆÀÅÐ - public Answer Judge(String solutionId, String problemId, String language, String sourceCode, Float timeOut, List testCaseBeans, Consumer con) { + public Answer Judge(String solutionId, String problemId, String language,String compiler, String sourceCode, Float timeOut, List testCaseBeans, Consumer con) { CompileInfo.init(); RunInfo.init(); this.con = con; @@ -108,6 +108,7 @@ public class Process { this.judger = new Judger(); Boolean is = this.judger.checkForCompiler(); this.solutionBean.setLanguage(language); + this.solutionBean.setCompiler(compiler); this.solutionBean.setSourceCode(sourceCode); this.problemBean.setTime_limit(timeOut); // if(is == false) return ; @@ -143,7 +144,7 @@ public class Process { } //µÃµ½ÆÀÅнá¹û - public Answer Judge(String language, String sourceCode, Float timeOut, List testCaseBeans) { + public Answer Judge(String language,String compiler, String sourceCode, Float timeOut, List testCaseBeans) { CompileInfo.init(); RunInfo.init(); Result.status = 0; @@ -154,6 +155,7 @@ public class Process { this.judger = new Judger(); //Boolean is = this.judger.checkForCompiler(); this.solutionBean.setLanguage(language); + this.solutionBean.setCompiler(compiler); this.solutionBean.setSourceCode(sourceCode); this.problemBean.setTime_limit(timeOut); // if(is == false) return ; @@ -242,7 +244,7 @@ public class Process { //step 2 private void judgeForAllTestcase() { - if (judger.compileFound() && 0 == judger.compile(solutionBean.getSourceCode(), solutionBean.getLanguage())) { + if (judger.compileFound() && 0 == judger.compile(solutionBean.getSourceCode(), solutionBean.getLanguage(),solutionBean.getCompiler())) { for (int i = 0; i < sumTestcaseNum; i++) { ProblemTestCaseBean caseBean = (ProblemTestCaseBean) testCaseBeans.get(i); @@ -252,7 +254,7 @@ public class Process { }else{ Shared.maxOutputLength=caseBean.getOutput().length()+2000; } - if (judger.run(solutionBean.getLanguage(), caseBean.getInput(), problemBean.getTime_limit().intValue()) == 0) { + if (judger.run(solutionBean.getLanguage(),solutionBean.getCompiler(), caseBean.getInput(), problemBean.getTime_limit().intValue()) == 0) { if (willCheck) { judger.check(caseBean.getOutput()); } else { diff --git a/Judger/src/share/gui/NewCompileSetting.java b/Judger/src/share/gui/NewCompileSetting.java index 9ad0fdb..ce031be 100644 --- a/Judger/src/share/gui/NewCompileSetting.java +++ b/Judger/src/share/gui/NewCompileSetting.java @@ -66,7 +66,7 @@ public class NewCompileSetting extends javax.swing.JDialog { //¸ù¾ÝradiobuttonµÄÑ¡ÔñÇé¿öÅжÏдÈë if (cSystem.isSelected()||cRegistry.isSelected()||cSelf.isSelected()) { //·¾¶Îª×Ô´ø±àÒëÆ÷·¾¶ - Config.getProp().setProperty(Const.MinGWDir, Config.CompilerDir("c")); + Config.getProp().setProperty(Const.MinGWDir, Config.CompilerDir("c",null)); Config.getProp().setProperty(Const.MinGWRelative, "1"); Config.getProp().setProperty(Const.MinGWDir, lblCRegistryMessage.getText()); Config.getProp().setProperty(Const.MinGWRelative, "2"); @@ -74,7 +74,7 @@ public class NewCompileSetting extends javax.swing.JDialog { Config.getProp().setProperty(Const.MinGWRelative, "3"); } if (javaSystem.isSelected()||javaRegistry.isSelected()||javaSelf.isSelected()) { - Config.getProp().setProperty(Const.JavaCompilerDir, Config.CompilerDir("java")); + Config.getProp().setProperty(Const.JavaCompilerDir, Config.CompilerDir("java",null)); Config.getProp().setProperty(Const.JavaRelative, "1"); Config.getProp().setProperty(Const.JavaCompilerDir, lblJavaRegistryMessage.getText()); Config.getProp().setProperty(Const.JavaRelative, "2"); @@ -110,7 +110,7 @@ public class NewCompileSetting extends javax.swing.JDialog { cRegistryList.removeAllItems(); javaRegistryList.removeAllItems(); //µÚÒ»ÓÅÏȼ¶ÎªÄÚÖñàÒëÆ÷£¬µÚ¶þΪע²á±íËÑË÷µ½µÄ£¬×îºóΪÓû§×Ô¶¨Òå - String MinGWDir = Config.CompilerDir("c"); + String MinGWDir = Config.CompilerDir("c",null); if (!FileFinder.isExistFile(MinGWDir)) { cSystem.setEnabled(false); } @@ -129,7 +129,7 @@ public class NewCompileSetting extends javax.swing.JDialog { cRegistry.setEnabled(false); } - String javaDirString = Config.CompilerDir("java"); // SXZ530 + String javaDirString = Config.CompilerDir("java",null); // SXZ530 if (!FileFinder.isExistFile(javaDirString)) { javaSystem.setEnabled(false); } @@ -200,7 +200,7 @@ public class NewCompileSetting extends javax.swing.JDialog { } else if (Config.MinGWRelative == 2) { //ÉèÖñ£´æÎªÑ¡Ôñ¼ÆËã»ú×¢²áµÄ¶«Î÷£¬¹Ê·¾¶Ó¦¸ÃÊÇÓеģ¬ÎÞÊÓÆäËûÇé¿ö cRegistry.setSelected(true); - MinGWDir = Config.getCompilerDir("c"); + MinGWDir = Config.getCompilerDir("c",null); tmpHashtable = CRegistryMessage; Iterator iter = tmpHashtable.entrySet().iterator(); while (iter.hasNext()) { @@ -216,7 +216,7 @@ public class NewCompileSetting extends javax.swing.JDialog { lblCRegistryMessage.setText(MinGWDir); } else if (Config.MinGWRelative == 3) { cSystem.setSelected(true); - MinGWDir = Config.getCompilerDir("c"); + MinGWDir = Config.getCompilerDir("c",null); cDir.setText(MinGWDir); setCFindPathGroupEnable(true); setCRegistryGroupEnable(false); @@ -228,7 +228,7 @@ public class NewCompileSetting extends javax.swing.JDialog { setJavaRegistryGroupEnable(false); } else if (Config.JavaRelative == 2) { javaRegistry.setSelected(true); - javaDirString = Config.getCompilerDir("java"); + javaDirString = Config.getCompilerDir("java",null); tmpHashtable = JavaRegistryMessage; Iterator iter = tmpHashtable.entrySet().iterator(); while (iter.hasNext()) { @@ -244,7 +244,7 @@ public class NewCompileSetting extends javax.swing.JDialog { setJavaRegistryGroupEnable(true); } else if (Config.JavaRelative == 3) { javaSystem.setSelected(true); - javaDirString = Config.getCompilerDir("java"); + javaDirString = Config.getCompilerDir("java",null); javaDir.setText(javaDirString); setJavaFindPathGroupEnable(true); setJavaRegistryGroupEnable(false); diff --git a/client/src/META-INF/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl b/client/src/META-INF/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl index 16d1483..44390b4 100644 --- a/client/src/META-INF/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl +++ b/client/src/META-INF/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl @@ -569,7 +569,7 @@ - + \ No newline at end of file diff --git a/client/src/client/view/panel/CodePanel.java b/client/src/client/view/panel/CodePanel.java index 236e040..f07f4a8 100644 --- a/client/src/client/view/panel/CodePanel.java +++ b/client/src/client/view/panel/CodePanel.java @@ -487,7 +487,17 @@ public class CodePanel extends JPanel implements ActionListener { CodePanel.this.toLoad = codeString; System.out.println("-----" + codeString); Float time_limit = Float.parseFloat(Control.getMainFrame().getInformation(String.valueOf(submitProblemId)).getTime_limit()); - Answer answer = new Process().Judge(language, codeString, time_limit+2, testCaseBeans); //loss of timelimit + + + + + + + + //////////todo:×ÔÖ÷Ñ¡Ôñ±àÒëÆ÷ + String compiler=""; + + Answer answer = new Process().Judge(language,compiler, codeString, time_limit+2, testCaseBeans); //loss of timelimit if (answer.getStatus().equals("NF")) { JOptionPane.showMessageDialog(CodePanel.this, "±àÒëÆ÷δÕÒµ½£¬Çë¼ì²é±àÒëÆ÷ÉèÖÃ", "Ìύʧ°Ü", JOptionPane.ERROR_MESSAGE @@ -693,7 +703,14 @@ public class CodePanel extends JPanel implements ActionListener { temp.setOutput(testCaseAns); testCaseBeans.add(temp); //System.out.println(language+JEP_Code.getText()+to+testCaseBeans); - outAll = new Process().Judge(language, JEP_Code.getText(), to+2, testCaseBeans); + + + + + + + String compiler=""; + outAll = new Process().Judge(language,compiler, JEP_Code.getText(), to+2, testCaseBeans); //System.out.println(JEP_Code.getText()); //System.out.println(outAll.getUsersOutput()[0]); diff --git a/client/xml-resources/web-service-references/OJWS/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl b/client/xml-resources/web-service-references/OJWS/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl index e3a5ea8..f277d8e 100644 --- a/client/xml-resources/web-service-references/OJWS/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl +++ b/client/xml-resources/web-service-references/OJWS/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl @@ -872,7 +872,7 @@ - + \ No newline at end of file diff --git a/config.xml b/config.xml deleted file mode 100644 index 7d0e557..0000000 --- a/config.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - K:\Dev-Cpp\MinGW64\bin - g++.exe -Wall -g -std=c++14 -c $sourceFile$ -o $objFile$ - - g++.exe -o $exeFile$ $objFile$ -O1 - - "$exeFile$" - - - C:/MinGW/bin/ - g++.exe -Wall -g -std=c++14 -c $sourceFile$ -o $objFile$ - - g++.exe -o $exeFile$ $objFile$ -O1 - - msvc - - - - - C:/JDK8/bin - g++.exe -Wall -g -std=c++14 -c $sourceFile$ -o $objFile$ - - g++.exe -o $exeFile$ $objFile$ -O1 - - "$compilerPath$ java -cp $sourceFile$\output\$exeFile$" - - - C:/MinGW/bin/ - g++.exe -Wall -g -std=c++14 -c $sourceFile$ -o $objFile$ - - g++.exe -o $exeFile$ $objFile$ -O1 - - - - - - - - C:/MinGW/bin/ - g++.exe -Wall -g -std=c++14 -c $sourceFile$ -o $objFile$ - - g++.exe -o $exeFile$ $objFile$ -O1 - - $exeFile$ - - - C:/MinGW/bin/ - g++.exe -Wall -g -std=c++14 -c $sourceFile$ -o $objFile$ - - g++.exe -o $exeFile$ $objFile$ -O1 - - - - - - - - - - \ No newline at end of file diff --git a/自选编译器文档.md b/自选编译器文档.md new file mode 100644 index 0000000..c34b2d5 --- /dev/null +++ b/自选编译器文档.md @@ -0,0 +1,13 @@ +# persistence.oj_beans包: + +SolutionBean:新增字段String compiler + + + +Solution,MySwingWorker + + + +XML中增加新元素compiler + +![image-20240306000021628](C:\Users\tange\AppData\Roaming\Typora\typora-user-images\image-20240306000021628.png) \ No newline at end of file